巨集定義(#define)
巨集定義又稱為巨集代換、巨集替換,簡稱「巨集」。
不帶引數
格式:
define 識別符號 字串
其中識別符號就是所謂的符號常量,也稱為「巨集名」。例:
#define pi 3.1415926//把程式中出現的pi全部換成3.1415926
說明:
帶引數格式:
#define 巨集名(參數列) 字串
例如:
#define s(a,b) a*b
area=s(3,2);//第一步被換為area=a*b; ,第二步被換為area=3*2;
#define s(r) r*r
area=s(a+b);//第一步換為area=r*r;,第二步被換為area=a+b*a+b;
最好給表示式中的引數都加上(),正確的巨集定義是
#define s(r) ((r)*(r))
#undef
作用:在後面取消以前定義的巨集定義。一旦識別符號被定義成乙個巨集名稱,它將在作用域內保持已定義狀態,直到程式結束或者使用#undef 指令取消定義。例:
#define test_a 1
#include "test.h"
#undef test_a
說明:在檔案#include 「test.h」 中巨集定義#define testa 1
起作用,過了這一語句巨集定義就釋放掉了,在test.h裡,這個巨集是有效的,然後出了這個標頭檔案,又無效了。
檔案包含(#include)
其一般形式為:
#include
"filename"
尖括號表示預處理到系統規定的路徑中去獲得這個檔案(即c 編譯系統所提供的並存放在指定的子目錄下的標頭檔案)。找到檔案後,用檔案內容替換該語句。
或
#include
雙引號表示預處理應在當前目錄中查詢檔案名為filename 的檔案,若沒有找到,則按系統指定的路徑資訊,搜尋其他目錄。找到檔案後,用檔案內容替換該語句。
條件編譯(#if、#else、#endif、#elif、#line、#pragma )
一般形式有
如果表示式為真,就編譯語句段1,否則編譯語句段2
#if表示式
//語句段1
#else
//語句段2]
#endif
如果表示式1真,則編譯語句段1,否則判斷表示式2;如果表示式2為真,則編譯語句段2,否則編譯語句段3
#if表示式1
//語句段1
#elif表示式2
//語句段2
#else
//語句段3
#endif
如果在此之前已定義了這樣的巨集名,則編譯語句段。
#ifdef 巨集名
//語句段
#endif
如果在此之前沒有定義這樣的巨集名,則編譯語句段。
#ifndef巨集名
//語句段
#endif
else可以用於#ifdef和#ifndef中,但#elif不可以。
pragma 預處理指令
格式: #pragma para
pragma message(「訊息文字」)
當編譯器遇到這條指令時就在編譯輸出視窗中將訊息文字列印出來。
pragma once
只要在標頭檔案的最開始加入這條指令就能夠保證標頭檔案被編譯一次
pragma warning
pragma warning(disable:450734)//不顯示4507和34號警告資訊;#pragma warning(once:4385)//4385號警告資訊僅報告一次;#pragma warning(error:164)//把164號警告資訊作為乙個錯誤。 等價於#pragma warning(disable:450734;once:4385;error:164)。#pragma warning(push)儲存所有警告資訊的現有的警告狀態。#pragma warning(push,n)儲存所有警告資訊的現有的警告狀態,並且把全域性警告等級設定為n。#pragma warning(pop)恢復所有的警告資訊
pragma push_macro
將指定的巨集壓入棧中,相當於暫時儲存,以備以後使用
pragma pop_macro
將棧頂的巨集出棧,彈出的巨集將覆蓋當前名稱相同的巨集
pragma deprecated
warning c4995: 「….」 : 名稱被標記為 #pragma deprecated這個錯誤意思是說,某個函式已經被標記為過時了,最好不要用,在將來的版本中,該函式可能就不存在了,可能會被更好的函式替代…
# line
這個巨集通常是和__line__
巨集一起使用的,__line__
巨集表示當前c語句在原始檔中的行數,舉個例子來說明 #line巨集的使用:
#include "iostream"
#line 100
using namespace std;
int main(int argc, char* argv)
//輸出結果是:__line__:104
本來應該是輸出:__line__:7
,因為cout<<"__line__:"<<__line__< pragma 預處理命令
在所有的預處理指令中,pragma 指令可能是最複雜的了,它的作用是設定編譯器的狀態或者是指示編譯器完成一些特定的動作。pragma 指令對每個編譯器給出了乙個方法 在保持與c和 c 語言完全相容的情況下 給出主機或作業系統專有的特徵。依據定義 編譯指示是機器或作業系統專有的 且對於每個編譯器都是不...
pragma預處理命令
pragma可以說是c 中最複雜的預處理指令了,下面是最常用的幾個 pragma指令 pragma comment lib,lib 表示鏈結 lib這個庫,和在工程設定裡寫上 lib的效果一樣。pragma comment linker,entry main function 表示指定鏈結器選項 e...
pragma 預處理指令
pragma 預處理指令詳解 在所有的預處理指令中,pragma 指令可能是最複雜的了,它的作用是設定編譯器的狀態或者是指示編譯器完成一些特定的動作。pragma指令對每個編譯器給出了乙個方法,在保持與c和c 語言完全相容的情況下,給出主機或作業系統專有的特徵。依據定義,編譯指示是機器或作業系統專有...