我正在寻找一种解决方案,以预先声明/定义GCC的实用程序。
我将消息编译指示用作待办事项列表(#pragma消息“执行此操作”)。但是,我希望通过以下构造完全启用/禁用消息的选项:
警告,这是伪代码:
// Definition
#if 1 // generate todo list
#define ADD_TODO(msg) #pragma message "[todo]" msg
#else
#define ADD_TODO(msg) /*empty*/
#endif
// Usage
ADD_TODO("this may result in unitialized variables, fix this")
Run Code Online (Sandbox Code Playgroud)
有人对这种结构有经验吗?
您需要_Pragma预处理运算符(在C99中引入):
// Definition
#define PRAGMA(...) _Pragma(#__VA_ARGS__)
#if 1 // generate todo list
#define ADD_TODO(msg) PRAGMA( message "[todo]" msg)
#else
#define ADD_TODO(msg) /*empty*/
#endif
// Usage
ADD_TODO("this may result in unitialized variables, fix this")
Run Code Online (Sandbox Code Playgroud)
操作者解决了不能够使用预处理器指令(如问题#pragma)内的#define)。它需要一个字符串字面量的参数,手工构造它是不切实际的,这就是为什么您总是会看到它被包裹在宏中的原因,该宏使用#(stringification)运算符构造了字符串,如上面的片段所示。