在初始化数组时使用#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