本文均來自狄泰軟件學院,謝絕轉載
#define定義的宏常量本質爲字面量(不佔用內存)
const常量,是隻讀變量(c語言),佔用內存
宏表達式與函數的對比
*宏表達式被預處理器處理,編譯器不知道宏表達式的存在
*宏表達式用“實參”完全替代形參,不進行任何運算
*宏表達式沒有任何的“調用”開銷
*宏表達式中不能出現遞歸定義
對於宏而言,是沒有作用域限制的(定義完宏,後面直接使用)因爲編譯器不知道宏定義標識符的存在,它是由預處理器處理的。
宏 含義 示例
_FILE_ 被編譯的文件名 file1.c
_LINE_ 當前行號 25
_DATA_ 編譯時的日期 Jan 31 2012
_TIME_ 編譯時的時間 17:01:01
_STDC_ 編譯器是否遵循標準C規範 1
小結
預處理器直接對宏進行文本替換
宏使用時的參數不會進行求值和運算
預處理器不會對宏定義進行語法檢查
宏定義時出現的語法錯誤只能被編譯器檢測
宏定義的效率高於函數調用
宏的使用會帶來一定的副作用