C 總結之預處理指令

2021-10-17 12:34:40 字數 1341 閱讀 2096

預處理指令

條件包含指令

文字替換指定

預定義巨集

原始檔包含

#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 預處理指令

巨集定義指令定義了乙個識別符號 巨集名 及乙個字串,在源程式中每次遇到該識別符號時,均以定義的字串替換它 巨集替換 巨集名和引數間不能有空格,識別符號和字串間可有任意空格 字串中應習慣對巨集引數加上括號,這樣使用巨集時,如果實參是表示式,則不易出錯 巨集替換只作巨集名和引數替換,不做計算,不做表示式...