自学C语言时mylib.h中宏定义常量无法使用问题求助
问题原因与解决方法
嘿,这个问题我太熟悉了——你踩了C语言宏定义里一个超常见的小坑!
问题出在哪?
你写的宏定义#define N_PEOPLE = 10是错误的!C语言里的#define是纯文本替换指令,语法规则是#define 标识符 替换内容,中间不需要加等号。
当你写了带等号的宏之后,预处理器会把所有出现N_PEOPLE的地方直接替换成= 10。那你结构体里的Person p[N_PEOPLE];就会被替换成:
Person p[= 10];
这完全是不符合C语法的代码,编译器当然会报错,程序自然跑不起来。而你直接写Person p[10];的时候,是合法的数组声明,所以能正常运行。
怎么解决?
非常简单,把宏定义里的等号删掉就行:
#define N_PEOPLE 10
修改后的完整头文件代码如下:
#define MYLIB_H #include <stdio.h> #include <math.h> #include <stdlib.h> #include <stdbool.h> #define N_PEOPLE 10 typedef struct { int status; int days; } Person; typedef struct { Person p[N_PEOPLE]; int sick; int healthy; int dead; int imune; } Model; int solve ( int test);
额外小提示
- 宏定义本质是文本替换,没有“赋值”的概念,所以千万不要加
=,这是很多新手容易犯的错; - 如果是定义带参数的宏,记得给参数和整体加括号避免优先级问题,但常量宏就按
#define 常量名 值的格式写就好。
内容的提问来源于stack exchange,提问作者Kvaestr
相关产品推荐
相关产品推荐

