可以使用宏定义没有返回值的“函数”。例如:
#define PrintMax(a, b) \
do \
{ \
int x = a, y = b; \
printf("Max: %d\n", x > y ? x : y);\
} while (0)
// ...
PrintMax(3, 4);
这样的“函数”与真正意义上的函数有本质的区别,因为宏是一个编译前行为,仅仅是编译前对文本进行替换。在Python源码中,经常可以看到下面类似的宏定义:
#define foo(x) \
do { \
... \
} while (0)
为什么要使用do { ... } while (0)这样的语法而不直接使用 { } 呢?定义了上面这个宏,我们就可以在代码中使用类似这样的代码:foo(3); 注意结尾的分号,它看起来很像一个函数,实现上它表示一条语句。如果使用 { } 来代替 do { ... } while (0),那么使用分号显然是个语法错误。
使用宏时,有几点要特别注意:
#define foo(x) (x << 2)
#define boo (x) (x << 2) //注意括号前面的空格
-
用宏给类型取别名与typedef有很大的区别。例如:
#define INT int *
INT p1, p2; // p1是指针,p2是一个int变量
typedef int * INT;
INT p1, p2; // p1, p2都为指针
//---------------------------------------------------
#define LONG long
unsigned LONG v1; // v1是一个无符号的long变量
typedef long LONG;
unsigned LONG v1; // 错误哦~~~
分享到:
相关推荐
函数模板与宏定义。代码复用的不同方式的定义,包含了用函数模板实现代码复用,用宏定义展开为函数的定义与使用。
详细罗列出宏定义和函数调用的区别,很全。。。
自己编写的SourceInsight宏函数(增加了很多实用的功能,欢饮交流指正^_^) ... HowToUseMacroFunction 本文所定义宏函数使用说明 ******************************************************************************
NULL 博文链接:https://jacky-dai.iteye.com/blog/868385
文章(一)内联函数与宏定义 在C中,常用预处理语句#define来代替一个函数定义。例如: #define MAX(a,b) ((a)>(b)?(a):(b)) 该语句使得程序中每个出现MAX(a,b)函数调用的地方都被宏定义中后面的表达式((a)>(b)?...
函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压栈开销。 函数宏本质上为宏,可以直接进行定义,例如: 复制 #define INT_SWAP(a,b) \ int ...
若字符串是表达式,我们称之为函数式宏定义,那函数式宏定义与普通函数有什么区别呢?我们以下面两行代码为例,展开描述:函数式宏定义:#define MAX(a,b) ((a)>(b)?(a):(b))普通函数 :MAX(a,b) { return a>b?a:b;}...
要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。
c++ 宏函数定义 例子 vs2012 很好的例子
C语言学习 讲解了宏的定义,带参数宏定义,带参的宏与函数区别,文件包含等
宏定义宏与函数的区别文件包含条件编译PPT课件.pptx
宏定义宏与函数的区别文件包含条件编译PPT学习教案.pptx
本资源为山东大学信号与系统实验八样例文件及宏定义函数,借助该文件可以较好地复现实验。 详解博客地址:https://blog.csdn.net/m0_52316372/article/details/125612586
关于C语言宏定义的用法,作了一个总结,除了常用宏定义外,还有类似函数的宏的用法
chap函数与宏定义PPT课件.pptx
chap函数与宏定义学习教案.pptx
内联函数的优越性:一:inline定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换(像宏定义一样展开),没有了调用的开销,效率很高。二:类的内敛函数是一个真正的函数。三:使用内联函数inline...
C语言中宏定义技巧.doc
C宏定义,预处理,函数等.txt