缺点:不支持提前退出函数宏;非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...
// 宏的内容比较长,也没有缩进,易读性较差,因此转为多行 #define ADD(x, y) \ do \ {\ int sum = (x) + (y);\ return sum;\ } while (0) 取消宏定义 如果想要取消对一个宏的定义,可以使用#undef预处理指令,比如要取消之前定义的ADD宏,只要像下面即可 #undef ADD 编译器参数定义以及预定义宏 ...
2.9.1 多行宏定义的使用 \是续行操作符,也就是宏定义一行写不完,需要多行写,就需要在每一行的后面加上续行操作符,注意字符\后要紧跟回车键,中间不能有空格或其他字符。 #define __HAL_RCC_GPIOC_CLK_ENABLE() do { \ __IO uint32_t tmpreg; \ ...
1、#define的宏 宏定义是以“\”换行,如:#define MAX(a,b) \ ((a) <(b) ? (b) : (a)) 2、关键字的换行 关键字换行支持:(+ - * / % = , | & ^ ~ || && == !=)以及括号等,均能作为换行符号。 3、字符串的换行 换行的字符串最后,添加双引号,下一行开头也加上双引号就可以。 如:...
四、命令行定义 五、条件编译 六、头文件的包含 1. 头文件包含的方式 2. 嵌套文件包含 上期回顾:【C语言基础】:预处理详解(一) 一、宏和函数的对比 宏通常被应有于执行简单的运算。 比如在两个数中找出较大的⼀个时,写成下面的宏,更有优势⼀些。
/* 需求: 1.debug模式下: a.如果定义了宏DEBUG_TO_FILE,那么将日志输出到文件 b.如果定义了宏DEBUG_TO_FILE,那么将日志输出到控制台 2.release模式下不打印任何日志 *//***///@Author:猿说编程//@Blog(个人博客地址): www.codersrc.com//@File:C语言教程 - C语言 define 定义函数(多行书写)//@Tim...
一般情况下,这些预先定义好的宏在所有翻译单元都可以直接使用。预处理器会在编译之前替换为具体的值。预定义宏不带参数,不能重新定义。预定义宏的知识我们在后面会详细讲述,现在我们先介绍__LINE__和__FILE__预定义宏,注意,前后分别是两个下划线!__LINE__预定义的是所在行的行号,整型常量,__FILE__预...
反斜杠起到换行作用,用于宏定义和字符串换行。其中宏定义中使用居多。\x0d\x0a如果一行代码有很多元素,导致太长影响阅读,可以通过在结尾加\的方式,实现换行,编译时会忽略\及其后的换行符,当做一行处理。\x0d\x0a在宏定义中,要换行必须使用\结尾。\x0d\x0a在字符串常量中,可以使用\结尾...