前定义GCC的实用性

时间:2019-06-11 16:32:57

标签: c macros

我正在寻找一种解决方案,以向前声明/定义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")

有人对这种结构有经验吗?

1 个答案:

答案 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(字符串化)运算符来构造字符串,如图所示。以上代码段。