C語言 預處理

2021-09-11 02:20:48 字數 1626 閱讀 6871

預處理

下面介紹一些 c/c++ 中幾個不常見卻有用的預編譯和巨集定義。

error

語法格式如下:

#error token-sequence 其主要的作用是在編譯的時候輸出編譯錯誤資訊token-sequence,從方便程式設計師檢查程式**現的錯誤。

例:#include 「stdio.h」

int main(int argc, char* ar**)

printf("%s\n",const_name2);

return 0;

}在編譯的時候輸出如編譯資訊

fatal error c1189: #error : no definedconstant symbol const_name1

pragma

其語法格式如下:

此指令的作用是觸發所定義的動作。如果token-sequence存在,則觸發相應的動作,否則忽略。此指令一般為編譯系統所使用。例如在visual c++.net 中利用# pragma once 防止同一**被包含多次。

line

此命令主要是為強制編譯器按指定的行號,開始對源程式的**重新編號,在除錯的時候,可以按此規定輸出錯誤**的準確位置。

形式1 # line constant 「filename」

其作用是使得其後的源**從指定的行號constant重新開始編號,並將當前檔案的名命名為filename。

例:#include 「stdio.h」

void test();

#line 10 「hello.c」

int main(int argc, char* ar**)

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巨集變數字串化)在本程式中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。

預定義的巨集

標準c的預處理器定義了一些巨集,這些巨集的名稱都是以兩個下劃線字元開始和結束的。程式設計師不能取消這些預定義巨集的定義或對它們進行重新定義。

幾個常用的預定義巨集:

C語言預處理

c語言中編譯預處理的三種形式的命令 巨集定義,檔案包含,條件編譯命令。1 巨集定義主要是 define,undef 如下 define pi 3.1415926 不帶引數的巨集定義 define max a,b a b?a b 帶引數的巨集定義 說明 巨集定義在c語言與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語言中...