C语言宏定义报错:'a'和'b'未声明,求解决方案
解决C语言编译错误:'a'和'b' undeclared as first use in this function
错误根源
你的sum宏定义存在语法错误:#define sum (a,b) (printf("%i",a + b));中,sum与参数列表(a,b)之间多了一个空格。
C语言的带参数宏要求宏名和参数列表必须紧挨着,不能有空格。这个空格会让预处理器把sum解析成无参数宏,宏内容是(a,b) (printf("%i",a + b));。当你调用sum(100,150)时,预处理器替换后会变成:
(a,b) (printf("%i",a + b));(100,150);
这里的a和b完全没有被替换成传入的100和150,编译器自然会报错说它们未声明。
修正方案
- 去掉
sum与(a,b)之间的空格 - 建议去掉宏末尾的分号(调用时已经加了分号,避免生成多余的空语句)
修正后的宏定义:
#define sum(a,b) printf("%i", a + b)
完整修正代码
#include <stdio.h> #include <stdlib.h> #include <string.h> #define Name "JSDJSDJ" #define Age 3000 #define sum(a,b) printf("%i", a + b) int main () { sum(100,150); printf("%i", Age); return 0; }
关于课程代码的疑问
课程中的同款代码能运行,大概率是因为课程里的宏定义是正确的(没有多余空格),你在抄写时不小心添加了空格,导致语法错误。
内容的提问来源于stack exchange,提问作者AbsoluteNothing
相关产品推荐
相关产品推荐

