首页 > 代码库 > C++11 新特性一增加了 __func__宏

C++11 新特性一增加了 __func__宏

在C11的新特性中,新增加了宏定义 __func__ 用来描述直接得到当函数的名称。

如:

const char* hello() {return __func__;} //返回hello.

也可作为初始化参数传递如:

struct TestStruct {
 TestStruct (): name(__func__){}  //返回TestStruct结构体类型。
 const char* name; 
};

 

__VAR_ARGS__ 表示可变参数的宏串,如下

#define LOG(...) {\
     fprintf(stderr, "%s: Line %d:\t", __FILE__, __LINE__);\
     fprintf(stderr, __VA_ARGS__);\
     fprintf(stderr, "\n");\
    }

这样就可以用一个宏实际了,标准输出的行为了。

 

 1 //demo.cpp 
 2 
 3 #include <iostream>
 4 
 5 using namespace std;
 6 
 7 const char* hello() {return __func__;}
 8 const char* world() {return __func__;}
 9 //====================1========================
10 struct TestStruct {
11     TestStruct (): name(__func__){}
12     const char* name;    
13 };
14 //====================2========================
15 #define LOG(...) {16                     fprintf(stderr, "%s: Line %d:\t", __FILE__, __LINE__);17                     fprintf(stderr, __VA_ARGS__);18                     fprintf(stderr, "\n");19                 }
20 //====================3========================
21 int main(int argc, char **args){
22     cout << "Standard Clib: " << __STDC_HOSTED__ << endl;
23     cout << "Standard C: "    << __STDC__ << endl;
24     
25     cout << "ISO/IEC " << __STDC_ISO_10646__ << endl;
26     cout << hello() << ", " << world() << endl;
27     //====================1========================
28     TestStruct ts;
29     cout << ts.name << endl;
30     //====================2========================
31     
32     int x = 3;
33     LOG("x = %d", x);
34     
35     //====================3========================
36     
37     
38     
39     
40     return 0;
41 }
42 
43 // gcc -std=c++11 demo.cpp -omain

 

C++11 新特性一增加了 __func__宏