Cx51編譯器中的預(yù)處理器處理源程序文件中的指令。Cx51支持所有的ANSI C指令。
Directives指令
預(yù)處理器指令前面不能有空格,并且必須加前綴‘#’如:
#pragma
#include
#define DEBUG 1
下面列出預(yù)處理器指信令和簡單描述
指令 描述
Define 定義一個預(yù)處理器宏或常量
elif 如果前面的if, ifdef, ifndef或elif分支都不成立的話,初始化if條件的一個分支
else 如果前面的if, ifdef或 ifndef分支都不成立的話,初始化if條件的一個分支
endif 結(jié)束一個if, ifdef, ifndef, elif, 或 else 塊
error 輸出用戶定義的一個錯誤信息。這個指令使用編譯器發(fā)出一個特定的錯誤信息
ifdef 為條件編譯求表達(dá)式的值。要被計(jì)算的參數(shù)就是一個definition 定義的名字
ifndef 與ifdef相同,只是如果這個名字沒有被定義時運(yùn)算結(jié)果為真
if 為條件編譯求表達(dá)式的值
include 從外部文件中讀取源程序文本。
line 指定一個行號和一個可選的文件名,這個指令用于在錯誤信息中定位錯誤的位置。Specifies a line number together with an optional filename. These specifications are used in error messages to identify the error position.
pragma 允許你使用可以在C51命令行上使用的控制指令。Allows you to specify control directives that may be included on the C51 command line. Pragmas may contain the same control directives that are specified on the command line.
undef 檢查一個宏或常量是否已經(jīng)定義
Stringize Operator(#)
字符化操作符#
如果操作符出現(xiàn)在宏的參數(shù)的前面,參數(shù)庫就會做為字符串傳遞到宏里。如
#define stringer(x) printf (#x "n")
stringer (text)
預(yù)處理器處理的結(jié)果為:
printf ("textn")
Token-pasting operator(##)
這個操作符在宏定義中連結(jié)兩個參數(shù)。它允許兩個分開的標(biāo)號在宏定義中合并為一個標(biāo)號
如果在宏定中一個宏參數(shù)名字緊隨著或緊跟著這操作符,宏參數(shù)和這個操作符被參數(shù)傳遞的值取代。鄰接著操作符的文本不是宏參數(shù)名稱的宏是不受影響的。如:
#define paster(n) printf ("token" #n " = %d", token##n)
paster (9);
預(yù)處理器處理的結(jié)果為:
printf ("token9 = %d", token9);
Predefined Macro Constants預(yù)定義宏常量
常量 描述
_ _C51_ _ C51編譯器的版本Version number of the Cx51 compiler (for example, 610 for version 6.10).
_ _DATE_ _ 編譯開始的日期Date when the compilation was started.
_ _FILE_ _ 被編譯文件的名字Name of the file being compiled.
_ _LINE_ _ 被編譯文件當(dāng)前的行號Current line number in the file being compiled.
_ _MODEL_ _ 選擇的存儲器模式Memory model selected (0 for small, 1 for compact, 2 for large).
_ _TIME_ _ 編譯開始的時間Time when the compilation was started.__STDC_ _ 定義為1時,表示完全遵守ANSI C標(biāo)準(zhǔn)