2016-12-02 55 views
0

我试图构建一个简单的C++宏观和我甚至不能上手。 Google目前还没有帮助。一个简单的C++ 11的宏

#define blow (...) __VA_ARGS__ 
int main() { 
    blow(); 
    } 

可生产这些错误:

g++ -fpermissive -std=gnu++11 -g3 -I/eclipse/workspace/shared /eclipse/workspace/shared/amanda.c++ -o /binaries/amanda 
[g++ shared/amanda took 0.0 seconds] 
1. /eclipse/workspace/shared/amanda.c++:7:20: warning: __VA_ARGS__ can only appear in the expansion of a C99 variadic macro [enabled by default] 
2. #define blow (...) __VA_ARGS__ 
3.     ^
4. /eclipse/workspace/shared/amanda.c++: In function ‘int main()’: 
5. /eclipse/workspace/shared/amanda.c++:7:15: error: expected primary-expression before ‘...’ token 
6. #define blow (...) __VA_ARGS__ 
7.    ^
8. /eclipse/workspace/shared/amanda.c++:9:2: note: in expansion of macro ‘blow’ 
9. blow(); 
10. ^
11. /eclipse/workspace/shared/amanda.c++:7:15: error: expected ‘)’ before ‘...’ token 
12. #define blow (...) __VA_ARGS__ 
13.    ^
14. /eclipse/workspace/shared/amanda.c++:9:2: note: in expansion of macro ‘blow’ 
15. blow(); 
16. ^
+0

https://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html – macroland

+0

我经历过的可变参数的宏文件。不同之处在于,我想要允许没有值,而不是需要初始“格式”字段。 –

+0

如果你的目标是建立一个简单的宏,那么不要尝试创建一个可变参数宏,这是因为它们比非可变参数不太简单。 – user2079303

回答

1

宏定义应该是没有宏的名称和(之间的空格:

#define blow(...) __VA_ARGS__ 
int main() { 
    blow(); 
} 

有了空间,可以定义正常,非可变参数宏blow其中扩展到(...) __VA_ARGS__,这会导致您的错误消息。