缺点:不支持提前退出函数宏;非C的原生语法(GCC支持的statement expression语法,用于将多条语句打包成一个表达式),编译器可能不支持。 附:以下使用({ })方法为一个改写 平方和 函数的案例: // 原函数定义intadd(intx,inty){returnx*x + y*y; }// 宏定义#defineADD(x, y) ({ \ int _x = (x); \...
C语言的多行宏定义 一、多行宏定义的使用 最近在跟STM32L011K4T6低功耗的源代码,发现使用了多行的宏定义来封装函数,记得之前把\给删除掉,编译程序就一直报错。 \是续行操作符,也就是宏定义一行写不完,需要多行写,就需要在每一行的后面加上续行操作符,注意字符\后要紧跟回车键,中间不能有空格或其他字符。
C语言宏定义函数的使用(定义单行和多行) C语言宏定义函数的使用(定义单行和多行) 2010-04-14 10:02define的单行定义 #define maxi(a,b) (a>b?a:b) define的多行定义 define可以替代多行的代码,例如MFC中的宏定义(非常的经典,虽然让人看了恶心) #define MACRO(arg1, arg2) do { \ /* ...
关键是要在每一个换行的时候加上一个 "\ " //宏定义写出swap(x,y)交换函数 #define swap(x, y)\ x = x + y;\ y = x - y;\ x = x - y; zigbee里多行define有如下例子 #define FillAndSendTxOptions( TRANSSEQ, ADDR, ID, LEN, TxO ) { \ afStatus_t stat; \ ZDP_TxOptions = (T...
6.带参宏与带参函数的区别 1.宏会在编译器在对源代码进行编译的时候进行简单替换,不会进行任何逻辑检测,即简单代码复制而已; 2.宏进行定义时不会考虑参数的类型; 3.参数宏的使用会使具有同一作用的代码块在目标文件中存在多个副本,即会增长目标文件的大小; ...
linux c之使用#define定义多行函数总结,1、用define的特点函数:会带来额外的开销,开辟一片栈空间,记录返回地址,将形参压栈,从函数返回还要释放堆栈,这种开销大,函数的参数必须被声明为一种特定的类型。宏定义:代码规模和速度方面都比函数效率更高,不需要规定特定
如何在C中定义多行宏定义? 请参阅下面的示例,其中我将交换两个变量的值。 do-while(0)结构很不错 代码语言:javascript 复制 #include<stdio.h>#defineswap(x,y,T)do{\Ttemp=(*x);\(*x)=(*y);\(*y)=temp;\}while(0)intmain(void){int a=5;int b=9;printf("Value of a and b before ...
函数:会带来额外的开销,开辟一片栈空间,记录返回地址,将形参压栈,从函数返回还要释放堆栈,这种开销大,函数的参数必须被声明为一种特定的类型。 宏定义:代码规模和速度方面都比函数效率更高,不需要规定特定类型。 2、使用规则 除了最后一行,每行末尾加上 \ ...
DISPATCH(),就是说当编译器检测到LV_ITERATE_ROOTS(f) 宏语句时,会自动把这条宏命令替换为后面十几个LV_DISPATCH()的宏语句,LV_DISPATCH()也是宏定义,定义就在第一句 #define LV_DISPATCH(f,t,n) f(t,n),就是LV_DISPATCH(f,t,n) 代表以t,n为参数执行函数名为f的函数。
宏定义中的多行代码 在宏定义中可以使用 \ 换行符将多行代码合并为一行。例如:在上述代码中,我们定义了一个宏定义 PRINTXY,它用于输出 x 和 y 的值。在 PRINTXY 宏定义中,我们使用了 \ 换行符将两个 printf 语句合并为一行。在 main 函数中,我们调用 PRINTXY 宏定义输出 x 和 y 的值。宏定义中的...