我正在寻找一种解决方案来向前声明/定义 GCC 的编译指示。
我使用消息编译指示作为待办事项列表(#pragma message“do this and that”)。
但是,我希望通过以下构造完全启用/禁用消息的选项:
警告,这是伪代码:
// 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")
有人有这种结构的经验吗?
最佳答案
您需要 _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")
运算符解决了无法在
#pragma
中使用预处理器指令(例如 #define
)的问题。它需要一个字符串字面量参数,手动构建是非常不切实际的,这就是为什么您几乎总是看到它包含在使用 #
(字符串化)运算符构建字符串的宏中的原因,如上面的代码片段所示。关于c - 前向定义 GCC 的编译指示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56548146/