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

在初始化数组时使用#define

#include  #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  #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 ,不是吗?

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

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

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

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

 #define TEST 1 

转换为:

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

去掉 ; 定义之后。

 #define TEST 1