#define MYADD(x,y) ((x) + (y)) //宏函数 1. 2.注意事项 宏函数在一定的程度上会比普通的函数效率高 #include "stdio.h" #include "string.h" #include "stdlib.h" #define MYADD(x,y) ((x) + (y)) //宏函数 void myAdd(int x,int y) { //x会在栈上定义,y也会 . 所以宏函数会...
} 通过gcc -E -P 1.c>2.c 命令,把1.c源码文件展开复制到2.c文件中,就可以通过2.c文件找到对应展开的宏函数代码: 可以看到展开后的宏函数在源码中的表现,如果在if或者while等语句不加大括号时,代码执行的效果和预期的不同,不了解过程的就会不好排查问题。 | 测试二 只加小括号会不会能解决问题呢,其实...
(3)宏展开:预处理器将源程序文件中出现的对宏的引用展开成相应的宏定义,经过预处理器处理的源程序与之前的源程序有所不同,在这个阶段所进行的工作只是纯粹的替换和展开,没有任何计算功能。 ②使用带参数的宏定义可完成函数调用的功能,又能减少系统开销,提高运行效率。 正如C语言中所讲,函数的使用可以使程序更加...
l 宏定义不是C语句,不必在行末加分号。l 对程序中用“”括起来的字符串内的字符,即使与宏名相同,也不进行置换。l 宏定义可以嵌套使用,例如:#define R 3.0#define PI 3.14159#define L 2*PI*R 3.知识点:带参数的宏定义l 一般形式:#define 宏名(参数表) 字符串l 带参数的宏不占运行时间,只占编译时间...
2.宏函数定义要注意格式,尤其是括号。如果上面的宏函数写成 #define MAX(a, b) (a>b?a:b),省去内层括号,则宏展开就成了k = (i&0x0f>j&0x0f?i&0x0f:j&0x0f),运算的优先级就错了。同样道理,这个宏定义的外层括号也是不能省的。若函数中是宏替换为 ++MAX(a,b),则宏展开就成了 ++(...
在C 语言中,宏定义是一种预处理指令,用于在编译之前将某些代码片段替换为指定的文本。使用宏定义可以定义一个函数或者函数模板。下面是宏定义函数的使用方法:1. 定义宏函数: ``` #...
在C语言中,我们有很多预定义的宏,就是C语言帮程序员预先定义好的宏,可以让我们使用。 宏 说明 __DATE__ 日期:Mmm dd yyyy __TIME__ 时间:hh:mm:ss __LINE__ 当前源文件的代码行号 __FILE__ 文件名 __func__ 函数名/非标准 __FUNC__ 函数名/非标准 ...
参考这里Concatenation#include//宏定义#defineGET_NAME(x)#xvoidfun0(){;}intmain(){//获取name==...
只要函数定义在#undefine之后,则函数无法使用#define的内容。 宏名在源程序中若用引号括起来,则预处理程序不对其作宏代换。 宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开时由预处理程序层层代换。 例如: #definePI 3.1415926#defineS PI*y*y/* PI是已定义的宏名*/...