缺点:不支持提前退出函数宏;非C的原生语法(GCC支持的statement expression语法,用于将多条语句打包成一个表达式),编译器可能不支持。 附:以下使用({ })方法为一个改写 平方和 函数的案例: // 原函数定义intadd(intx,inty){returnx*x + y*y; }// 宏定义#defineADD(x, y) ({ \ int _x = (x); \...
C语言的多行宏定义 一、多行宏定义的使用 最近在跟STM32L011K4T6低功耗的源代码,发现使用了多行的宏定义来封装函数,记得之前把\给删除掉,编译程序就一直报错。 \是续行操作符,也就是宏定义一行写不完,需要多行写,就需要在每一行的后面加上续行操作符,注意字符\后要紧跟回车键,中间不能有空格或其他字符。
如何在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 swa...
关键是要在每一个换行的时候加上一个 "\ " //宏定义写出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...
1.函数宏的书写 #defineMAX(a,b)((a)(b)?(a):(b)),这就是一个简单的函数宏,我们同样可以传递参数,实现功能。但是在书写上注意两点MAX和左“(”之间没有空格,因为宏定义把标示符后的第一个空格会认为是标示符与字符串的分割。当然我们在写宏的时候有时候会写多行,这样我们一般用“\”进行分割。
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的函数。
任意个数的参数的宏(C99) #include <stdio.h> #include <stdarg.h> // 测试函数的用法是: 满足参数条件的话, 执行打印"通过测试", 否则执行自定语句 #define TEST(cond, ...)\ ((cond) ? printf("Passed test: %s\n", #cond) :\ printf(__VA_ARGS__)) ...
宏定义中的多行代码 在宏定义中可以使用 \ 换行符将多行代码合并为一行。例如:在上述代码中,我们定义了一个宏定义 PRINTXY,它用于输出 x 和 y 的值。在 PRINTXY 宏定义中,我们使用了 \ 换行符将两个 printf 语句合并为一行。在 main 函数中,我们调用 PRINTXY 宏定义输出 x 和 y 的值。宏定义中的...
//开启下面的宏就把调试信息输出到文件,注释即输出到终端 #define DEBUG_TO_FILE #ifdef DEBUG_TO_FILE //调试信息输出到以下文件 #define DEBUG_FILE "/tmp/debugmsg" //调试信息的缓冲长度#define DEBUG_BUFFER_MAX 4096 //将调试信息输出到文件中 ...