在初始化数组时使用#define时的语法错误,以及作为C中函数的参数?

时间:2013-02-10 17:29:51

标签: c c-preprocessor

初始化数组时使用#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 只是在源文件上进行搜索和替换,将TEST替换为1,不是吗?

2 个答案:

答案 0 :(得分:8)

问题是因为#define TEST 1;中有分号。

有了这个,该程序转换为:

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

补救措施:删除它,使其看起来像:

#define TEST 1

转换为:

int array[] = {1}; /*legal*/

答案 1 :(得分:5)

删除;在定义之后。

#define TEST 1