LinuxC – gcc 預先定義的巨集

GCC提供三個能夠給出當前函數名的神奇變數,第一個變數是”__func__”,其是C99標準的一部分:
識別字”__func__”由轉譯器隱式聲明,就像函數定義的開始花括弧緊跟它的後面,其聲明如下
static const char __func__[] = “function-name”;
其中”function-name”即是函數的詞條名,此名尚未被變形。
“__FUNCTION__” 是”__func__”的一個別名。舊版本的GCC只認得這個名稱。然而,它還未被標準化,為了獲取最大可能的移植性推薦使用”__func__”代之,可通過預處理器宏提供向後相容:

在C中,”__PRETTY_FUNCTION__”也是”__func__”的另一個別名。然而,在C++中,除了包含函數裸名外,還包含函數簽名。例如,看下麵的程式:

產生如下的輸出:

這些識別字並非預處理器宏。在GCC 3.3和早期版本中,僅限於C中”__FUNCTION__”和”__PRETTY_FUNCTION__”被作為字面量,它們可被用於初始化字元陣列, 也可與其他字串相連接。GCC 3.4和後來版本,像”__func”一樣將它們作為變數。在C++中,”__FUNCTION__”和 “__PRETTY_FUNCTION__”總被作為變數。

reference: http://jyhshin.pixnet.net/blog/post/26588145

在〈LinuxC – gcc 預先定義的巨集〉中有 1 則留言

易春木 發表迴響 取消回覆