关键字:宏可以设法得到几个结果5,使用宏次数多时,宏展开后源程序长,因为每展开一次都使程序增长,而函数调用不使源程序变长。关键字:宏展开后源程序会变长6,宏替换不占运行时间。而函数调用则占运行时间(分配单元、保 留现场、值传递、返回)。关键字:宏替换不占运行时间所以:一般来说,用宏来代表简短的表达式比...
规则1:实参替换。本条规则描述带参数的宏的替换过程。对于宏定义中的形参,在替换列表中,如果不是作为#或##的操作数,那么将对应实参完全 展开(相当于对实参进行求值),然后将替换列表中的形参替换掉.如果是#或##的操作数,那么不进行替换。规则2:多次扫描。在所有的形参替换为实参后,对结果进行再次...
按理说给的参数是2+2,所得的结果应该为4*4=16,但是错了,因为该程序的实际结果为8,仍然是没能遵循纯粹的简单替换的规则,又是先计算再替换 了,在这道程序里,2+2即为area宏中的参数,应该由它来替换宏定义中的x,即替换成2+2*2+2=8了。那如果遵循(1)中的解决办法,把2+2 括起来,即把宏体中的x括起...
(1)在展开的过程中,如果替换列表中出现了被展开宏,那么该展开宏不会被展开 (2)更进一步,在展开的过程中,任何嵌套的展开过程中出现了被展开宏,该被展开宏也不会被展开 6、func-like的宏展开 (1)identifier-list也就是参数列表里的参数会被完全展开,但如果该参数在替换列表中被#或##所调用,那么该参数不展开;...
计算机科学里的宏是一种抽象的,根据一系列预定义的规则进行文本替换。 宏是一种将一系列命令组织在一起,作为一个单独命令来完成特定任务的方式。在编译语言中,宏展开是在编译时进行的,编译器会自动将宏替换为一系列指令。宏展开器是用于执行宏展开的工具。
因为宏定义了 N 为 5,那么在编译器中有出现的 N 的地方都会被替换成数字 5。所以这里就变成 5=3,很显然 5 不符合标识符的规则,就会报错。那么该怎么解决这个问题呢?C 语言中也提供一种预处理指令,#undef。它的其中一个功能就是删除前面定义过的宏,解放标识符。由此可以知道,宏定义的作用域是从定义...
对于h(f(1,2)),预处理器看到的先是 h,然后 (, 对其参数 f(1, 2) 进行替换,得到 g( f(1,2) ), 注意这里的下一步是,预处理器就继续往后走,处理刚得到的f(1,2), 得到12,到了这里我们的得到的是一个: g(12),然后重新扫描整个宏,替换 g,最后得到 "12",解析结束。
C语言宏定义的用法规则如下:1. 宏定义的格式为:#define 宏名 替换文本。2. 宏名必须是一个有效的C标识符,并且不可以是C语言的关键字。3. 替换文本可以是任意合法的C语句,可以包含常量、表...
C语言宏定义的规则如下:1. 宏定义是使用`#define`关键字进行定义的,其格式为:`#define 宏名 替换文本` - 宏名:由字母、数字和下划线组成的标识符,不能以数字开头且不能与...