关键字:宏可以设法得到几个结果5,使用宏次数多时,宏展开后源程序长,因为每展开一次都使程序增长,而函数调用不使源程序变长。关键字:宏展开后源程序会变长6,宏替换不占运行时间。而函数调用则占运行时间(分配单元、保 留现场、值传递、返回)。关键字:宏替换不占运行时间所以:一般来说,用宏来代表简短的表达式比...
规则1:实参替换。本条规则描述带参数的宏的替换过程。对于宏定义中的形参,在替换列表中,如果不是作为#或##的操作数,那么将对应实参完全 展开(相当于对实参进行求值),然后将替换列表中的形参替换掉.如果是#或##的操作数,那么不进行替换。规则2:多次扫描。在所有的形参替换为实参后,对结果进行再次...
(1)在展开的过程中,如果替换列表中出现了被展开宏,那么该展开宏不会被展开 (2)更进一步,在展开的过程中,任何嵌套的展开过程中出现了被展开宏,该被展开宏也不会被展开 6、func-like的宏展开 (1)identifier-list也就是参数列表里的参数会被完全展开,但如果该参数在替换列表中被#或##所调用,那么该参数不展开;...
1)#define name stuff #define 宏名 宏值 2)#define 宏名(参数列表) 表达式 #define name( parament-list ) stuff 二、什么是宏 计算机科学里的宏是一种抽象的,根据一系列预定义的规则进行文本替换。 宏是一种将一系列命令组织在一起,作为一个单独命令来完成特定任务的方式。在编译语言中,宏展开是在编译...
4. 删除宏定义指令 有时候先定义了宏,后面我又重新定义了和宏名一样的变量,会发生什么情况呢?这里编译器会给变量 N 标出红色波浪线,给出错误提示:应输入标识符。因为宏定义了 N 为 5,那么在编译器中有出现的 N 的地方都会被替换成数字 5。所以这里就变成 5=3,很显然 5 不符合标识符的规则,就会...
对于h(f(1,2)),预处理器看到的先是 h,然后 (, 对其参数 f(1, 2) 进行替换,得到 g( f(1,2) ), 注意这里的下一步是,预处理器就继续往后走,处理刚得到的f(1,2), 得到12,到了这里我们的得到的是一个: g(12),然后重新扫描整个宏,替换 g,最后得到 "12",解析结束。
宏替换:通过使用#define定义宏,可以将一段代码或表达式抽象成一个标识符,在编译时将标识符替换成对应的代码或表达式。 文件包含:通过使用#include指令,可以将其他文件的内容包含到当前文件中,方便代码的组织和复用。 条件编译:通过使用#ifdef、#ifndef、#endif、#if、#elif、#else等指令,可以根据条件编译开关的设置决...
然后替换parameter,发现替换后遇到#了,即得到#f(1,2) 再然后也没有然后了,将这个#f(1,2)变成了字符串f(1,2)了,因为预处理遇到#不会继续了。 宏替换除了以上这条规则,还有很多,有十几条之多,我之前在《基于C99规范,最全C语言预处理知识总结》有讲解,欢迎查阅。
C语言宏定义的用法规则如下:1. 宏定义的格式为:#define 宏名 替换文本。2. 宏名必须是一个有效的C标识符,并且不可以是C语言的关键字。3. 替换文本可以是任意合法的C语句,可以包含常量、表...