我有以下代码
#if defined(TESTING)
#define TEST_FAILED_IN_VMC(...) TestFailed(__FILE__, __LINE__, __VA_ARGS__)
#define TEST_FAILED_IN_UNIT_TEST(...) TestFailedInUnitTest(__VA_ARGS__)
#else
#define TEST_FAILED_IN_VMC(...)
#define TEST_FAILED_IN_UNIT_TEST(...)
#endif
并拨打电话TEST_FAILED_IN_VMC(peripheral, testSuiteName, testName,
"Internal coding error; bad state (%d)", state);
并且编译器表示未定义testSuiteName
和testName
- 即使未定义#TESTING
。
[更新]编译器还说"Error 3 implicit declaration of function 'TEST_FAILED_IN_VMC'
[更新]请忽略此行以下的内容。问题在于上面。感谢。
所以,我试过这个[更新] else
应该是#else
,然后我被告知TESTING
并非违法。那么,为什么上面的代码不起作用?
#if defined(TESTING)
#error "Testing is defined <<<<<<<<<<<<<<<<<<<<<<<<"
wf
else
#error "Testing is NOT defined <<<<<<<<<<<<<<<<<<"
eyh6
#endif
#ifdef TESTING
#error "Testing is defined @@"
ehye
else
#error "Testing is NOT defined @@"
5he567
#endif
#error "Sample error ###"
并且编译器唯一的错误是Error 3 #error "Sample error ###"
知道出了什么问题吗? (Atmel AVR Studio,基于Microsoft Visual studio`。
很多很多其他#if defined
工作得很好......
答案 0 :(得分:3)
使用else
代替#else
,使用正确的预处理程序指令。
答案 1 :(得分:2)
您错过了#
之前的else
。
编辑: 对于你添加的真实问题,我尝试了以下代码,它在gcc 4.5.2中编译运行没有任何问题。
#include <stdio.h>
#if defined(TESTING)
#define TEST_FAILED_IN_VMC(...) TestFailed(__FILE__, __LINE__, __VA_ARGS__)
#define TEST_FAILED_IN_UNIT_TEST(...) TestFailedInUnitTest(__VA_ARGS__)
#else
#define TEST_FAILED_IN_VMC(...)
#define TEST_FAILED_IN_UNIT_TEST(...)
#endif
int main()
{
TEST_FAILED_IN_VMC
(
peripheral
, testSuiteName
, testName
, "Internal coding error; bad state (%d)"
, state
);
printf("Test successful\n");
return 0;
}
那么,您使用的是什么编译器(以及哪个版本)?