我們寫**一般都會寫一些注釋,為了讓人更好的理解**,但是對於編譯器來說,這些注釋都需要去除,為了實現預處理,就是去除注釋、換行、回車等,我用dfa(確定有限自動機
)來實現。
#include #include using namespace std;
#define r 10
#define c 8
//dfa
int dfa[r][c]= \
, /*1*/,
/*2*/,
/*3*/,
/*4*/,
/*5*/,
/*6*/,
/*7*/,
/*8*/,
/*9*/
};//字元轉碼
int code(char ch)
return chars;
}//判斷是空格、tab、回車、換行等
int judge(char curch)
void pretreat(const char*src, const char *des)
else if(code(curch) == 1)
if(judge(curch)&& space == 0)
//else
//space = 1;
break;
}else if(judge(curch)&& space == 1)
else
case 6:
case 7:
case 8:
case 9:
wbuffer[j++] = curch;break;
} prestate = curstate;
prech = curch;
i++;
} outfile
delete wbuffer;
infile.close();
outfile.close();
}int main()
編譯器預處理 ifndef 條件編譯
這是 if not defined的簡寫,是巨集定義的一種,它是可以根據是否已經定義了乙個變數來進行分支選擇,一般用於除錯等等。實際上確切的說這應該是預處理功能中三種 巨集定義,檔案包含和條件編譯 中的一種 條件編譯。define x 定義乙個巨集 endif c語言在對程式進行編譯時,會先根據預處...
LLVM 編譯器學習筆記之六 預處理
1 llvm 中使用builder.definemacro定義builtin巨集,類似gcc的builtin define,以下是llvm8 中定義對gcc 4.2.1版本相容性巨集 gnuc 的示例 配套的介面還有ismacrodefined及undefinemacro 2 巢狀優先順序 在 bu...
預處理器,編譯器,彙編器,聯結器
1.2程式被其它程式翻譯成不同的格式 hello程式的生命週期是從乙個源程式 hello.c 稱為高階c語言 開始,被其它程式轉化為一系列的低階機器語言指令,這些指令按照一種稱為可執行目標程式的格式打包好,以二進位制磁碟檔案的形式儲存。例 unix gcc o hello hello.c可以實現原始...