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'


【更新】この線より下の部分は無視してください。問題は上にあります。ありがとう。

だから、私はこの[更新]を試してみました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 ###"

何がうまくいかないのか分かりますか?(MicrosoftVisualStudioをベースにしたAtmelAVRStudio`。

多くの、多くの、他の多くの人#if definedがうまく働いています...

4

2 に答える 2

3

の代わりにelse#elseを使用して正しいプリプロセッサディレクティブを使用します。

于 2012-11-02T03:08:07.620 に答える
2

あなたはsの#前に欠けています。else

編集:あなたが追加した実際の質問のために、私はgcc4.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 に答える