1

我有以下代码

#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'


[更新]请忽略此行下方的非常。问题在上面。谢谢。

所以,我试过这个 [Update]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的工作都很好......

4

2 回答 2

3

而不是else,用于#else使用正确的预处理器指令。

于 2012-11-02T03:08:07.620 回答
2

你错过了 s#之前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;
}

那么,您使用的是什么编译器(以及什么版本)?

于 2012-11-02T03:08:10.577 回答