1.  __BASE_FILE__ 
完整的原始檔案路徑

2.  __cplusplus
表示該檔案由 g++ 所編譯,當成 C++ 的檔案

3.  __DATE__
編譯的日期

4.  __TIME__
編譯的時間

5.  __FILE__   
原始檔名

6. __LINE__
所在行數
 
7. __VERSION__   
gcc 版本

8. __func__  
替代 __FUNCTION__,__FUNCTION__ 已被 GNU 不推薦使用



GCC提供三个能够给出当前函数名的神奇变量,第一个变量是"__func__",其是C99标准的一部分:
标识符"__func__"由转译器隐式声明,就像函数定义的开始花括号紧跟它的后面,其声明如下
  static const char __func__[] = "function-name";
其中"function-name"即是函数的词条名,此名尚未被变形。
"__FUNCTION__"是"__func__"的一个别名。旧版本的GCC只认得这个名称。然而,它还未被标准化,为了获取最大可能的移植性推荐使用"__func__"代之,可通过预处理器宏提供向后兼容: 

  #if __STDC_VERSION__ < 199901L 
  # if __GNUC__ >= 2 
  #  define __func__ __FUNCTION__ 
  # else 
  #  define __func__ "
  # endif 
  #endif

在C中,"__PRETTY_FUNCTION__"也是"__func__"的另一个别名。然而,在C++中,除了包含函数裸名外,还包含函数签名。例如,看下面的程序:

  extern "C" { 
  extern int printf (char *, ...); 
  }

  class a { 
  public: 
     void sub (int i) 
     { 
        printf ("__FUNCTION__ = %s\n", __FUNCTION__); 
        printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); 
     } 
  };

  int main (void) 
  { 
    a ax; 
    ax.sub (0); 
    return 0; 
  }

产生如下的输出:

  __FUNCTION__ = sub 
  __PRETTY_FUNCTION__ = void a::sub(int)

这些标识符并非预处理器宏。在GCC 3.3和早期版本中,仅限于C中"__FUNCTION__"和"__PRETTY_FUNCTION__"被作为字面量,它们可被用于初始化字符数组, 也可与其它字串相连接。GCC 3.4和后来版本,像"__func"一样将它们作为变量。在C++中,"__FUNCTION__"和 "__PRETTY_FUNCTION__"总被作为变量。


創作者介紹

邱小新の工作筆記

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()