c語言中編譯預處理的三種形式的命令:巨集定義,檔案包含,條件編譯命令。
1、巨集定義主要是:#define,#undef
如下:#define pi 3.1415926 /*不帶引數的巨集定義*/
#define max(a,b) a>b?a:b /*帶引數的巨集定義*/
說明:巨集定義在c語言與c++語言中是相通的。
下面舉例說明定義巨集failed用於檢測資料的正確性。
①#define的應用:
#define failed(status) ((status)<0)
#include "stdio.h"
void main()
while(failed(d));
} 其中while(failed(d))在編譯之前被無條件替換為while(d<0)。
巨集定義和呼叫在形式與函式比較相似,但是原理是不同。
②#undef的應用:
#include "stdio.h"
void test();
int main(int argc, char* argv)
printf("%s/n",const_name2);
return 0;
}void test()
在程式的編譯的時候,系統提示如下資訊
error c2065: 'const_name1' : undeclared identifier
出現上述編譯錯誤的原因是,在第二次應用符號常量const_name1時,此符號常量已經被取消定義。
#pragma pack(pop)//恢復對齊狀態為測試該功能,可以使用sizeof()測試結構體的長度!
③#line
此命令主要是為強制編譯器按指定的行號,開始對源程式的**重新編號,在除錯的時候,可以按此規定輸出錯誤**的準確位置。
形式1語法格式如下:
# line constant 「filename」:其作用是使得其後的源**從指定的行號constant重新開始編號,並將當前檔案的名命名為filename。例如下面的程式如下:
#include "stdio.h"
void test();
#line 10 "hello.c"
int main(int argc, char* argv)
printf("%s/n",const_name2);
return 0;
}void test()
提示如下的編譯資訊:hello.c(15) : error c2065: 'const_name1' : undeclared identifier
表示當前檔案的名稱被認為是hello.c, #line 10 "hello.c"所在的行被認為是第10行,因此提示第15行出錯。
形式2語法格式如下:
# line constant:其作用在於編譯的時候,準確輸出出錯**所在的位置(行號),而在源程式中並不出現行號,從而方便程式設計師準確定位。
④運算子#和##
在ansi c中為預編譯指令定義了兩個運算子——#和##。
# 的作用是實現文字替換,例如
#define hi(x) printf("hi,"#x"/n");
void main()
程式的執行結果:hi,john
在預編譯處理的時候, "#x"的作用是將x替換為所代表的字串行。在本程式中x為john,所以構建新串「hi,john」。
##的作用是串連線。例如
#define connect(x,y) x##y
void main()
程式的執行結果為:a1=0 a2=12 a3=4
在編譯之前, connect(a,1)被翻譯為a1, connect(a,2)被翻譯為a2。
⑤預定義常量
__line__:當前源**的行號,為整型常量
__file__:當前編譯程式檔案的名稱,為字串
__date__:編譯程式檔案日期,為字串(」mm dd yyyy"形式,如」 jan 19 1993」)
__time__:編譯程式檔案時間,為字串("hh:mm:ss"形式,如」08:30:23」)
__stdc__:ansi c標誌,整型常量1,說明此程式相容ansi c標準。
C語言預處理
預處理 系統自動自動呼叫預處理程式對程式中 號開頭的預處理部分進行處理,處理完畢後可以進城源程式的編譯階段。預定義 一些預定義符號 常用於除錯 file 正在預編譯的源檔名 line 當前行號 只有這個是整數常量,其他是字串常量 function 當前所在函式名 date 當前日期 time 當前時...
c語言預處理
預處理可以包含 1 巨集定義指令 2 標頭檔案包括指令 3 條件編譯指令 4 編譯程式可以識別的特殊符號 巨集定義 define undef 檔案包含 include 條件編譯 if ifdef else elif endif等 其他 line error program等 注意事項 1 在c語言中...
C語言 預處理
預處理 下面介紹一些 c c 中幾個不常見卻有用的預編譯和巨集定義。error 語法格式如下 error token sequence 其主要的作用是在編譯的時候輸出編譯錯誤資訊token sequence,從方便程式設計師檢查程式 現的錯誤。例 include stdio.h int main i...