如何在 C 中将一个指令定义为另一个指令?
How to define a directive as an other directive in C?
如何在 C 语言中将一个指令定义为另一个指令?
ex : 我想定义
#define #warning #warn
我收到一个错误
error #41: expected an identifier
例如,对于编译器和目标,一些编译器识别 #warning
,而其他编译器识别 #warn
。
我已经有办法做到这一点,但我想让它通用
#if PLATFORMS_TOOLCHAIN == PLATFORMS_ticgt
#warn "RAM is not initialized at startup, test will possibly fail"
#else
#warning "RAM is not initialized at startup, test will possibly fail"
#endif
无法创建您自己的预处理器指令。 #define
指令仅允许您定义新的源符号。
您目前正在做的是在不同编译器上处理不同指令的正确方法。
通常这是不可能的,但是您可以使用 _Pragma keyword
.
有效地生成 #pragma
指令
#define PRAGMA(...) _Pragma(#__VA_ARGS__)
PRAGMA(message "my message")
//as if you wrote: #pragma message "my message"
考虑到这一点,您的编译器可能有允许您模拟 #warn
或 #error
的编译指示
(#pragma GCC warning "message"
或 #pragma GCC error "message"
)。
如果你的编译器没有这样的编译指示,你总是可以通过扩展到相对上下文无关的不可编译的东西来使编译失败,例如,char ERROR[-1];
(负数组大小是非法的)。
如何在 C 语言中将一个指令定义为另一个指令?
ex : 我想定义
#define #warning #warn
我收到一个错误
error #41: expected an identifier
例如,对于编译器和目标,一些编译器识别 #warning
,而其他编译器识别 #warn
。
我已经有办法做到这一点,但我想让它通用
#if PLATFORMS_TOOLCHAIN == PLATFORMS_ticgt
#warn "RAM is not initialized at startup, test will possibly fail"
#else
#warning "RAM is not initialized at startup, test will possibly fail"
#endif
无法创建您自己的预处理器指令。 #define
指令仅允许您定义新的源符号。
您目前正在做的是在不同编译器上处理不同指令的正确方法。
通常这是不可能的,但是您可以使用 _Pragma keyword
.
#pragma
指令
#define PRAGMA(...) _Pragma(#__VA_ARGS__)
PRAGMA(message "my message")
//as if you wrote: #pragma message "my message"
考虑到这一点,您的编译器可能有允许您模拟 #warn
或 #error
的编译指示
(#pragma GCC warning "message"
或 #pragma GCC error "message"
)。
如果你的编译器没有这样的编译指示,你总是可以通过扩展到相对上下文无关的不可编译的东西来使编译失败,例如,char ERROR[-1];
(负数组大小是非法的)。