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

如何解决这两个问题?我以为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 回答