ZKX's LAB

C语言中,宏替换的替换规则 宏数字的标识符

2020-08-11知识11

简述C语言中标识符和关键字的概念与区别 标识符是在程序2113中使用的变量名、函数5261名、标号等统称为标识4102符。除库函数的函数名由系统定义外,其余都由用户1653自定义。C规定,标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线()组成的字符串,并且其第一个字符必须是字母或下划线。在使用标识符时还必须注意以下几点:(1)标准C不限制标识符的长度,但它受各种版本的C语言编译系统限制,同时也受到具体机器的限制。例如在某版本C中规定标识符前八位有效,当两个标识符前八位相同时,则被认为是同一个标识符。(2)在标识符中,大小写是有区别的。例如BOOK和book是两个不同的标识符。(3)标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因此,命名应尽量有相应的意义,以便阅读理解,作到“顾名思义”。关键字你看一看这一个C语言中,宏替换的替换规则 简单来说:宏定义又称为宏2113代换5261、宏替换,简称“宏”。宏替换是C/C++的预处理中的一4102部分1653,在C++标准中有4条规则来定义替换。规则1:实参替换。本条规则描述带参数的宏的替换过程。对于宏定义中的形参,在替换列表中,如果不是作为#或#的操作数,那么将对应实参完全展开(相当于对实参进行求值),然后将替换列表中的形参替换掉.如果是#或#的操作数,那么不进行替换。规则2:多次扫描。在所有的形参替换为实参后,对结果进行再次扫描,如果发现还有可替换的宏,则进行替换,否则中止。规则3:递归替换抑制。如果在替换列表中发现当前正在展开的宏的名字,那么这里不进行替换.更进一步,在嵌套的替换过程中发现已经替换过的宏的名字,则不进行替换。规则4:递归预处理抑制。如果替换后的结果形成预处理指令,则不执行这条预处理指令。看几个C++标准中的例子:define x 3define f(a)f(x*(a))undef xdefine x 2define g fdefine z z[0]define h g(~define m(a)a(w)define w 0,1define t(a)af(y+1)+f(f(z))%t(t(g)(0)+t)(1);g(x+(3,4)-w)|h 5)&m(f)^m(m);其结果分别是f(2*(y+1))+f(2*(f(2*(z[0]))))%f(2*(0))+t(1);f(2*(2+(3,4)-0,1))|f(2*(~5))&f。C 中预定义标识符与关键字有什么区别

#c语言#c语言关键字#下划线#宏定义#c++

随机阅读

qrcode
访问手机版