(個人筆記)
巨集定義對於用c語言程式設計的人是經常用,這裡只講使用中需注意的問題點和方便的用法。
1.巨集擴充套件中空格對擴充套件結果的影響
#define a(y)a_expanded(y)
a(x)被擴充套件為: a_expanded(x)
#define a(y)a_expanded(y)
a(x) 被擴充套件為: (y) a_expanded(y) (x)
2.用巨集實現自動注釋除錯**
假如用來列印trace的函式為trace(),我們可以巨集定義乙個自己的函式my_trace
#ifdef debug
#define my_trace trace
#else
#define my_trace /\
/my_trace
/*注意這裡/一定要頂格寫,否則就不是注釋符//了*/
#endif
在沒定義debug巨集的情況下使用my_trace函式,由於續行符的作用**展開後會變成注釋了。
如my_trace("test");展開後變成了//my_trace("test");
3.巨集定義裡的注釋
#define num 1//(2)
在使用num的時候替換時是沒有注釋的。原因是預處理的時候在替換巨集之前已經把注釋全部替換為空格了。
附上預處理步驟:
1)三連符替換成相應的單字元,/r/n(windows上)和/n(linux)上通改為換行符
2)把用/字元續行的多行**接成一行
3)把注釋(不管是單行注釋還是多行注釋)都替換成乙個空格。
4)預處理器把邏輯**行劃分成token和空白字元,
5)遇到#include預處理指示,則把相應的原始檔包含進來,並對原始檔做以上1-4步預處理。如果遇到巨集定義則做巨集展開。
6)找出字元常量或字串中的轉義序列,用相應的位元組來替換它,比如把/n替換成位元組0x0a。
7)把相鄰的字串連線起來。
8)把token交給c編譯器做語法解析,這時就不再是預處理token,而稱為c token了。
C語言 巨集定義,預處理巨集
巨集是學習任何語言所不可缺少的,優秀的巨集定義可以使得 變得很簡潔且高效,有效地提高程式設計效率。巨集是一種預處理指令,它提供了一種機制,可以用來替換源 中的字串,直譯器或編譯器在遇到巨集時會自動進行這一模式替換 c語言有簡單的巨集系統,由編譯器或彙編器的預處理器實現。c的巨集預處理器的工作只是簡單...
C語言 預處理和巨集定義
今天分享一點c語言的預處理還有巨集相關的內容。目錄 預處理和巨集定義 一 乙個c程式的誕生 1 預編譯階段 c i 2 編譯階段 i s 3 彙編階段 s o 4 鏈結階段 該程式的所有.o exe 1 c語言中部分內建巨集 2 巨集的功能 1 使用巨集定義常量 2 使用巨集重新命名運算子 3 使用...
C 預處理 巨集定義
開發乙個 c語言程式,讓它暫停 5 秒以後再輸出內容 helllo 並且要求跨平台,在 windows 和 linux 下 include 說明 在windows 作業系統和 linux作業系統下,生成原始碼不一樣 if win32 如果是windows平台,就執行 include elif lin...