預處理指令
條件包含指令
文字替換指定
預定義巨集
原始檔包含
#pragma指令
#error和#line
預處理指令的常見應用
防止標頭檔案被重複包含
日誌巨集巨集定義實現動態庫**和除錯**使用同一標頭檔案
條件編譯
共包括#if,#ifdef,#ifndef,#elif,#else,#endif
條件包含指令的格式:
用法:
共包括#define,和#undef指令,同時還有#和##運算子
用法:
#與##運算子只能用於仿函式巨集樣式的#define表示式的"文字"中: 巨集
用途__cplusplus
c++標準,取值可能為199711,201103,201402,201703,202002
__stdc_hosted__
有作業系統時為1
__file__
當前檔案
__line__
行號,可被#line改變
__date__
"mmm dd yyyy"格式日期
__time__
"hh:mm:ss"時間
__stdcpp_default_new_alignment
new操作符的位元組對齊
用法:上述兩種形式在標準文件中並沒有詳細規定,但是,在visual studio和gcc中來看:
該指令用於控制編譯器的特定於實現的行為,依賴於具體編譯器的支援
用法:#pragma 引數
比較常見的有:
用法:
這有兩種方法:
一般在打日誌時通常需要檔名和行號來定位**位置,此時可使用__file__和__line__巨集,如下面的例子:
// logger.h
class logger;
#define log(...) \
logger::info(__file__, __line__, __va_args__)
#ifdef dll_export
#define dll_api __declspec(dllexport)
#else
#define dll_api __declspec(dllimport)
#endif
dll_api void func();
一般在開發跨平台的**時,由於不同平台api的差異,為了實現同一功能可能需要根據os來進行條件編譯,如:
void func()
C 預處理指令
1.define 通常和 if一起使用 使用 define可以定義乙個符號,並通過將該符號用作表示式傳遞給 if 指令,使該表示式的計算結果為true 比如 preprocessor if.cs define debug define vc v7 using system public class ...
C預處理指令
一 預處理的由來 在c 的歷史發展中,有很多的語言特徵 特別是語言的晦澀之處 來自於c語言,預處理就是其中的乙個。c 從c語言那裡把c語言預處理器繼承過來 c語言預處理器,被bjarne博士簡稱為cpp,不知道是不是c program preprocessor的簡稱 二 常見的預處理功能 預處理器的...
C 預處理指令
巨集定義指令定義了乙個識別符號 巨集名 及乙個字串,在源程式中每次遇到該識別符號時,均以定義的字串替換它 巨集替換 巨集名和引數間不能有空格,識別符號和字串間可有任意空格 字串中應習慣對巨集引數加上括號,這樣使用巨集時,如果實參是表示式,則不易出錯 巨集替換只作巨集名和引數替換,不做計算,不做表示式...