我曾在项目偏好中设想过其中一个
TESTING = HOSTTESTING = TARGETTESTING 根本没有定义我的问题是后者.
似乎而不是
#if TESTING==HOST
#error "HOST defined" // add temporarilly for testing porpoises
#endif
Run Code Online (Sandbox Code Playgroud)
我需要编码
#ifdef TESTING
#if TESTING==HOST
#error "HOST defined" // add temporarilly for testing porpoises
#endif
#endif
Run Code Online (Sandbox Code Playgroud)
我确信这不是标准行为,因为如果TESTING没有定义那么它肯定不相等HOST,而且我不需要#ifdef TESTINGGCC编译器那么多.
但是,当我使用Atmel AVR Studio(我认为它基于MS Visual Studio)时,有必要#ifdef TESTING在几十个地方添加该首字母:-(
看起来我别无选择,但我只是想知道是否有任何C标准真的需要这个.
oua*_*uah 29
#if TESTING==HOST
Run Code Online (Sandbox Code Playgroud)
如果TESTING没有定义,那么
它相当于:
#if 0==HOST
Run Code Online (Sandbox Code Playgroud)
从C标准:
(C99,6.10.1p4)"在完成由于宏扩展和已定义的一元运算符的所有替换后,所有剩余的标识符(包括与关键字词法相同的标识符)将替换为pp-number 0""
请注意,您可以这样做:
#ifndef TESTING
...
#elif TESTING == HOST
...
#elif TESTING == TARGET
...
#else
#error "Unexpected value of TESTING."
#endif
Run Code Online (Sandbox Code Playgroud)
也:
#if defined(TESTING) && TESTING == HOST
...
#endif
Run Code Online (Sandbox Code Playgroud)
如果要折叠测试.括号是可选的(#if defined TESTING有效)但我认为包含它们更清楚,特别是当你开始添加额外的逻辑时.
| 归档时间: |
|
| 查看次数: |
24579 次 |
| 最近记录: |