C语言宏定义名可以有括号和分号吗?

宏定义的名称,是C语言标识符的一种,和函数名,变量名的命名规则是一样的,只允许使用数字,字母,下划线,且不能以数字开头。

所以宏名是不可以有括号和分号的。

另外,在C语言编程中,一般约定宏名用大写字母加下划线组成,而避免使用小写字母。这一条并非是C语言规范强制要求,而是编程时的一种习惯。

c语言宏定义(c语言宏定义是什么意思)_c语言宏定义(c语言宏定义是什么意思)

为什么C语言宏定义总是编译出错?求大神指教?软件设置问题?

解答:如果不确定编译器设置是否正确,可以把代码粘贴到在线IDE(例如ideone)上去编译、运行,查看出错信息。

两点建议:编程问题建议去相关论坛发帖子,比如stackoverflow或者csdn;讨论具体的编程问题,一定要附上代码。

请问C语言中宏定义怎么用

宏定义就好像是WORD中的“全部替换”一样,只不过这个替换是在将源程序在系统“编译”时执行的。

#define sub(a,b) ((a)-(b))

源程序中若有

x=sub(200-1,100+10);

会被编译为:

x=((200-1)-(100+10));

即x被赋值为89

如果#define sub(a,b) a-b的话

x=sub(200-1,100+10);

就变成x=200-1-100+10;

x会被赋值为109

c语言宏定义(c语言宏定义是什么意思)_c语言宏定义(c语言宏定义是什么意思)_02

c语言关于宏定义、函数

宏定义的基础知识。引用宏定义时,直接代入进行代换。

既然已经宏定义SUB(a) (a)-(a),而程序中出现的对应a的是a+b,那么就将a换为a+b代入表达式:

d=SUB(a+b)*c=(a+b)-(a+b)*c=(2+3)-(2+3)*5

直接用(a+b)-(a+b)代换SUB(a+b)。这一点和数学是不同的,不要强行往数学上靠。c语言的字符是用ascii码表示的。每一个字符对应一个整数。同样的,每一个整数也对应一个字符。a~z对应66~90。a~z对应97~122的数。ch大于a小于z时让它 a-a,正好可以把它的ascii码变为a~z区间内的整数。