今天一個新同學來問一個典型的預處理的問題,我當年也碰到這樣的問題,貼出來,讓更多的人能直接搜到
預處理命令
# 和 ## 操作符是和#define宏使用的. 使用# 使在#后的首個參數返回為一個帶引號的字符串. 例如, 命令
#define to_string( s ) # s
將會使編譯器把以下命令
cout << to_string( Hello World! ) << endl;
理解為
cout << "Hello World!" << endl;
使用##連結##前后的內容. 例如, 命令
#define concatenate( x, y ) x ## y
...
int xy = 10;
...
將會使編譯器把
cout << concatenate( x, y ) << endl;
解釋為
cout << xy << endl;
理所當然,將會在標準輸出處顯示'10'.
語法:
#line line_number "filename"
|
#line命令是用于更改__LINE__ 和 __FILE__變量的值. 文件名是可選的. __LINE__ 和 __FILE__ 變量描述被讀取的當前文件和行. 命令
#line 10 "main.cpp"
更改行號為10,當前文件改為"main.cpp".
語法:
__LINE__
__FILE__
__DATE__
__TIME__
_cplusplus
__STDC__
|
下列參數在不同的編譯器可能會有所不同, 但是一般是可用的:
- __LINE__ 和 __FILE__ 變量表示正在處理的當前行和當前文件.
- __DATE__ 變量表示當前日期,格式為month/day/year(月/日/年).
- __TIME__ 變量描述當前的時間,格式為hour:minute:second(時:分:秒).
- _cplusplus 變量只在編譯一個C++程序時定義.
- __STDC__ 變量在編譯一個C程序時定義,編譯C++時也有可能定義.