1

配列の初期化中に #define を使用する

#include <stdio.h>

#define TEST 1;

int main(int argc, const char *argv[])
{
        int array[] = { TEST };

        printf("%d\n", array[0]);

        return 0;                                                                                                                                                                                                                 
}

コンパイラは不平を言います:

test.c: In function ‘main’:
test.c:7: error: expected ‘}’ before ‘;’ token
make: *** [test] Error 1

関数入力引数として #define を使用する

#include <stdio.h>

#define TEST 1;

void print_arg(int arg)
{
        printf("%d", arg);
}

int main(int argc, const char *argv[])
{
        print_arg(TEST);
        return 0;                                                                                                                                                                                                                 
} 

コンパイラは不平を言います:

test.c: In function ‘main’:
test.c:12: error: expected ‘)’ before ‘;’ token
make: *** [test] Error 1

この 2 つの問題をどのように解決しますか? Cは単にソース ファイルを検索して置換TEST1、.

4

2 に答える 2

8

問題は、にセミコロンがあるため#define TEST 1;です。

これにより、プログラムは次のように変換されます。

int array[] = { 1; }; /*this is illegal!*/

対処法: 次のように削除します。

#define TEST 1

これは次のように変換されます。

int array[] = {1}; /*legal*/
于 2013-02-10T17:30:57.177 に答える
5

削除する ; 定義後。

#define TEST 1
于 2013-02-10T17:30:41.893 に答える