我正在寻找一种解决方案,以向前声明/定义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")
有人对这种结构有经验吗?
答案 0 :(得分:5)
您需要A
预处理运算符(在C99中引入):
_Pragma
运算符解决了无法在// 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")
内使用预处理器指令(例如#pragma
)的问题。它需要一个字符串字面量的参数,手工构造这是不切实际的,这就是为什么您总是会看到它被包裹在宏中的原因,该宏使用#define
(字符串化)运算符来构造字符串,如图所示。以上代码段。