Time of Update: 2018-12-07
上一篇:C語言解譯器的實現--儲存結構(一) 詞法分析是編譯原理中最容易理解的,就算沒有瞭解過編譯原理,也能寫出一個詞法分析器。我們不用理解Regex,不用理解狀態機器原理,就可以輕鬆的完成詞法的分析。
Time of Update: 2018-12-07
目錄:1.指令碼的執行要素2.棧的類比.3.變數在棧中的地址計算4.函數的調用過程5.命令的解析6.C的庫函數調用 在前面的文章中,我主要講解了語言的解析部分,最終我們生產了指令碼的中間代碼。接下來,將是一個最困難的時刻,怎麼解析執行中間代碼! 執行代碼其實是經過一定處理後的中間代碼的另外一種表示。正如前面提到的,我們的中間代碼是三元組的形式,比如:c = a + b * c; 可以表示成 @1 = b * c; @2 = a + @1; @3 = c =
Time of Update: 2018-12-07
在做WinForm開發時,我們經常用到的提示恐怕就是MessageBox。但是有時提示過於頻繁導致使用者無法工作,比如,如果系統一直在迴圈嘗試串連到伺服器,如果串連不上則會迴圈提示使用者無法串連伺服器。這種情況下,恐怕用MessageBox就有點暴力啦。替代方法,可以換成把提示顯示在表單介面上,但是不夠醒目,那怎樣好呢,QQ提示窗,有動畫的效果又不會頻繁的提示,好的問題解決。那麼看看怎麼實現吧實現QQ提示框,核心是用到系統庫user32.dll 代碼1:Code highlighting
Time of Update: 2018-12-07
前些日子,在QQ群裡面,發現一些朋友在討論函數返回後,為什麼值可以傳遞和地址傳遞的情況;我也感到很好奇,於是就跟了一下。int* sum(int x,int y){ int a; a=x|y; return &a;} 很顯然這段代碼,存在一些問題;但是在VC2008中編譯一切正常,運行狀態也一切正常。下面是我的測試代碼:#include <stdio.h>int* sum(int x,int y){ int a; a=x+y;
Time of Update: 2018-12-07
今天在Gmail的群組討論貼中看到這樣一個文章:[learn-linux-c-cpp] 一維數組轉成指向數組的指標收件匣x zhangzhe benzhemin@gmail.com11-10-28發送至 learning-linux. 還請大家討論一下:代碼:#include <stdio.h>int main(void){ int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int (*p)[2] = (int (*)
Time of Update: 2018-12-07
最近看C庫,簡單的學習了一下assert和setjmp庫的功能,貼點心得。/* 本程式測試庫函數,用來學習、理解庫*/#include <stdio.h>/*測試:assert宏 與 NDEBUG的關係Tip: 經過各種測試,為了取消 assert 宏,必須在它之前定義NEDBUG; 這裡也說明一個問題,宏的定義和引用是有先後順序的 如果 #undef NDEBUG #define NDEBUG 在
Time of Update: 2018-12-07
1、GNU C 參考手冊http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html 2、伊利諾大學 ACM C 參考手冊 庫函數http://www.acm.uiuc.edu/webmonkeys/book/c_guide/ 3、藍色巨人 C/C++
Time of Update: 2018-12-07
好久沒有看C的書籍了,前兩天在CSDN求助,求各位大神們能介紹一本書,我求助的要求是這樣的:求一本介紹Windows C語言執行階段程式庫的書籍。書的內容要求是:能夠具體介紹C語言庫函數的實現方法,例如printf這樣的函數,或者fopen這樣的函數是如何?的。結果很多大俠沒有明白我的意思,給我介紹的都是非常經典的書籍: 《Windows程式設計》、《Windows核心編程》這樣的書籍,在此對那些回複的大俠表示感謝。
Time of Update: 2018-12-07
#include<stdio.h>#include<stdlib.h>#define MAXLen 100 //最大節點數typedef char DATA;//元素類型typedef struct CBT{ DATA data; struct CBT *left;//左子樹節點指標 struct CBT *right;//右子樹節點指標}CBTType;CBTType *InitTree()//初始化二叉樹根{ CBTType *node;
Time of Update: 2018-12-07
.net2.0對ftp有了一個很好的封裝,但是確容易讓人忽略ftp的真正內部實現,下面是我實現的ftp用戶端的功能,其主要步驟是這樣的:1、建立一個FtpWebRequest對象,指向ftp伺服器的uri 2、設定ftp的執行方法(上傳,下載等) 3、給FtpWebRequest對象設定屬性(是否支援ssl,是否使用二進位傳輸等) 4、設定登入驗證(使用者名稱,密碼) 5、執行請求 6、接收相應流(如果需要的話) 7、如果沒有開啟的流,則關閉ftp請求
Time of Update: 2018-12-07
具體源碼如下:<轉載> 一、使用API函數mciSendString構成的媒體播放類。 程式碼 using System; using System.Runtime.InteropServices; using System.Text; using System.IO ; namespace clsMCIPlay { /// <SUMMARY>
Time of Update: 2018-12-07
原來學C的時候,只是把它當編程基礎來學的,現在再回頭看一下,發現其實要是想編程,而不是做應用,還是C爽。(不代表偶認為c不可以做應用,相反,有的應用只有c可以做,不過做B/S的東東還是用java\c#\php方便點。) 一個簡單的學生資訊管理,由於是用vim編輯的,中文注釋就沒加。主要函數有三個,main() new_stud() 和 listall() 一看就知道結構和功能啦,呵呵。 C#include<stdio.h>#include<stdlib.h>
Time of Update: 2018-12-07
有一個檔案名稱為num.txt的文字檔,裡面有1千萬個隨機數,這些數位大小在0~1億之間,儲存方式如下: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->542223223232454345232676575.......要求:1.寫一個程式來讀取這個檔案中的數字,並從大到小排序後以上面的格式儲存為 num_b.txt2.記憶體佔用不可超過1MB
Time of Update: 2018-12-07
最經典的就是下面這段Post資料流到HTTP地址上,然後獲得返回的響應。 //把sXmlMessage發送到指定的DsmpUrl地址上 Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); byte[] arrB = encode.GetBytes(sXmlMessage); HttpWebRequest myReq = (HttpWebRe
Time of Update: 2018-12-07
1。比較時間大小的實驗 string st1="12:13"; string st2="14:14"; DateTime dt1=Convert.ToDateTime(st1); DateTime dt2=Convert.ToDateTime(st2); DateTime dt3=DateTime.Now; if(DateTime.Compare(dt1,dt2)>0) msg.Text=st1+">"+st2; else
Time of Update: 2018-12-07
文章目錄 淺拷貝深拷貝
Time of Update: 2018-12-07
C#常量主要分為兩種:編譯時間和運行時常量編譯時間常量用關鍵字const來定義,運行時常量用關鍵字readonly來定義兩者區別: 編譯時間常量,在編譯時間便用該常量的值代替常量變數。 運行時常量,在運行時返回一個運行時常量的變數引用這兩種變數引用方式會導致什麼不同呢,且看下面代碼: 引用Effective C#中的例子:定義一個類庫Limitation,其中呢定義了一個類Limitations,代碼如下: Code highlighting produced by
Time of Update: 2018-12-07
/* 本程式測試線性隊列的資料結構*/#include <stdio.h>#define MAXSIZE 1024typedef struct node{int data[MAXSIZE];int length;} SeqList;/*函數功能: 初始化線性隊列函數原型: void SeqListInit(SeqList *pSeqList,int n)函數參數: SeqList *pSeqList: 待初始化隊列首指標 int
Time of Update: 2018-12-07
在園子裡面貼代碼的時候,經常有人貼代碼就像下面這樣前面帶有行號,複製下來後,粘貼到代碼編輯器裡面後,前面很多的數字編譯前還要全部的刪除這些數字才能編譯,幾十行的代碼刪除也就算了,如果程式碼成千上萬行後就比較麻煩了。 Exp:帶前置行號的C原始碼1 #include <stdio.h>2 3 int main(int argc,char **argv)4 {5 printf("hello world!");6 7 return 0; 8
Time of Update: 2018-12-07
看了一天孫鑫老師的視頻教程,發現其實在VC++中利用MFC進行編程也可以攔截訊息,通過建立訊息映射來處理訊息。 嘿嘿,根據老師講的內容,自己測試了書中的代碼。 發現XP和2000對處理客戶區的範圍不一樣。 void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call default////////////