缺点:不支持提前退出函数宏;非C的原生语法(GCC支持的statement expression语法,用于将多条语句打包成一个表达式),编译器可能不支持。 附:以下使用({ })方法为一个改写 平方和 函数的案例: // 原函数定义intadd(intx,inty){returnx*x + y*y; }// 宏定义#defineADD(x, y) ({ \ int _x = (x); \...
\是续行操作符,也就是宏定义一行写不完,需要多行写,就需要在每一行的后面加上续行操作符,注意字符\后要紧跟回车键,中间不能有空格或其他字符。 #define __HAL_RCC_GPIOC_CLK_ENABLE() do { \__IO uint32_t tmpreg; \SET_BIT(RCC->IOPENR, RCC_IOPENR_GPIOCEN);\/* Delay after an RCC peripher...
在C语言中,可以使用反斜杠符号(\)来实现多行宏定义。反斜杠符号表示这一行和下一行是同一行的续行。因此,可以将多行的宏定义拆分成多行,如下所示:#define MAX(a, b) \ ((a) > (b) ? (a) : (b))#define SQUARE(x) \ ((x) * (x)) 复制代码 在上面的例子中,MAX和SQUARE分别是多行宏定义,...
多行宏定义是指宏定义的内容跨越了多行代码。在C语言中,由于宏定义是在预处理阶段进行文本替换的,因此当宏定义的内容较长,无法在一行内写完时,就需要使用多行宏定义。 3. C语言中多行宏定义的具体语法 在C语言中,要实现多行宏定义,需要在每行的末尾使用反斜杠(\)作为续行符。反斜杠后面必须直接跟换行符,不...
C语言中#define在多行宏定义出错的原因 1.第一种错误 #include<stdio.h>#defineechange(a,b) {\/*宏定义中允许包含多行命令的情形,此时必须在最右边加上"\"*/intt;\ t=a;\ a=b;\ b=t;\ }main() {intc, d; c =2; d =3;printf("%d %d\n", c, d);echange(c,d)printf("%d %d\n"...
define的多行定义 define可以替代多行的代码,例如MFC中的宏定义(非常的经典,虽然让人看了恶心) #define MACRO(arg1, arg2) do { \ /* declarations */ \ stmt1; \ stmt2; \ /* ... */ \ } while(0) /* (no trailing ; ) */ 关键是要在每一个换行的时候加上一个 "\ " ...
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的函数。
3. 宏的单行定义和多行定义 宏定义中允许包含两行以上命令的情形,此时必须在最右边加上\且该行\后不能再有任何字符,连注释部分都不能有,下面的每行最后的一定要是\,\后面加一个空格都会报错,更不能跟注释。
一、使用反斜杠分割多行 在C语言中,反斜杠(\)作为一种行继续符,可以帮助开发者将较长的单行语句分割成多个物理行。这种方法尤其适用于复杂的宏定义或长字符串,能够使代码更加易于阅读和维护。当编译器遇到反斜杠时,它会将其视为一条指令,告知编译器忽略该反斜杠后面的换行符,从而将两行代码视为一行。