(1)宏名一般用大写; (2)使用宏可以提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改; (3)预处理是在编译之前的处理,预处理不做语法检查; (4)宏定义末尾没有分号;//不加; (5)宏定义自然作用域为从定义开始一直到本文件结尾; (6)可以用#undef命令提前终止宏定义的自然作用域; (7...
所谓的宏扩展就是代码替换,也就是为我们平常说的 #define 主要作用为一下几点 减少重复的代码; 完成一些通过 C 语法无法实现的功能(字符串拼接); 动态定义数据类型,实现类似 C++ 中模板的功能; 程序更容易理解、修改(例如:数字、字符串常亮); 1.4.1 宏扩展的好处 不需要检查参数,更灵活的传参; 直接对宏进行...
(1)宏定义是在预处理期间处理的,而函数是在编译期间处理的。这个区别带来的实质差异是:宏定义最终是在调用宏的地方把宏体原地展开,而函数是在调用函数处跳转到函数中去执行,执行完后再跳转回来。 注:宏定义和函数的最大差别就是:宏定义是原地展开,因此没有调用开销;而函数是跳转执行再返回,因此函数有比较大的调...
(1).带参数宏定义,如果参数在当前的宏中有进行运算,那么必须对该参数使用括号括起来(类似例子中MUL_THREE里面的z,MUL_TWO里面的val1和val2); (2).带参数宏定义,如果参数没有在当前的宏中有进行运算,而是直接当成参数传递给其他的宏,那么该参数是不用使用括号进行保护的(类似例子中MUL_THREE里面的x和y)。
C语言带参数的宏定义:#define f(X) ((X)*(X)) 在以上知识点总结7里面,有很多同学对宏定义的理解还不是很透彻,今天以一个例题深入分析一下。没复习到的同学可以查看上面链接先熟悉一下。 首先,什么是宏定义? 2.知识点:不带参数的宏定义l 一般形式:#define 宏名 字符串(或数值)即用字符串或数值取代宏...
如下示例: #include<stdio.h>#define sum(b,c){int d=0;d=b+c;printf("两者的和:%d\n",d);}int main(){ int x=0,y=0; scanf("%d%d",&x,&y); sum (x,y); return 0;}拓展资料使用宏函数或者宏函数时,注意如下...
1、#define宏定义 以#号开头的都是编译预处理指令,它们不是C语言的成分,但是C程序离不开它们,#define用来定义一个宏,程序在预处理阶段将用define定义的来内容进行了替换。因此在程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。define定义的常量,预处理时只是直接进行了替换,,它用来将一个标识...
__nonnull的宏定义在/usr/include/sys/cdefs.h里面: /* The nonull function attribute allows to mark pointer parameters which must not be NULL. */#if__GNUC_PREREQ (3,3)#define__nonnull(params) __attribute__ ((__nonnull__ params))#else#define__nonnull(params)#endif ...
有:在类体内定义成员函数: class Fred { public: void f(int i, char c) { // ... } }; 尽管这对于写类的人来说很容易,但由于它将类是“什么”(what)和类“如何”(how)工作混在一起. 小结 总之,在嵌入式C(或C++)编程里面,懂得使用内联函数(inline)与宏定义(#define),并使用好它们,对我们是大...