#define MAX(x,y) (((x)>(y))?(x):(y))程序运行的结果就变成了-1。因为整个表达式都用括号包住了,所以替换后也没有破坏原有的计算顺序,看起来好像万无一失了,但其实脆弱的很。我们只要给宏函数的参数传入不同类型的数据,比如将上面程序中的int类型变量y定义成float类型,比如:float y = 3.5;其...
#define MAX( x, y ) ( (x) > (y) ? (x) : (y) ) #define MIN( x, y ) ( (x) < (y) ? (x) : (y) ) 求平方 #define SQR(x) ((x)*(x))
下面总结和宏和函数的不同之处,以供大家写代码时使用,这段总结摘自《C和指针》一书。 C语言宏定义和宏定义函数 example: define的单行定义 #define maxi(a,b) (a>;b?a:b) define的多行定义 define可以替代多行的代码,例如MFC中的宏定义(非常的经典,虽然让人看了恶心) #define MACRO(arg1, arg2) do ...
简介:C语言宏定义(#define定义常量、#define定义宏、 带有副作用的宏参数、 宏替换的规则、 宏函数的对比) 一、#define的基本语法 在C语言中,常量是使用频率很高的一个量。常量是指在程序运行过程中,其值不能被改变的量。常量常使用#define来定义。 使用#define定义的常量也称为符号常量,可以提高程序的...
#define SUM (x) (x)+(x) 这还是定义的宏函数SUM(x)吗?显然不是。编译器认为这是定义了一个宏:SUM,其代表的是(x) (x)+(x)。 为什么会这样呢?其关键问题还是在于SUM 后面的这个空格。所以在定义宏的时候一定要注意什么时候该用空格,什么时候不该用空格。这个空格仅仅在定义的时候有效,在使用这个宏函数...
C语言的宏文本替换,是通过预处理指令define实现的,#define的使用场景主要有:1)直接使用标识符不定义具体常量的标识符用法 2)替换常量的对象式宏(Object-like macros)3)模拟函数功能的函数式宏(Function-like macros)4)替换文中支持可变的参数数量的可变参宏 5)#和##运算法的用法等。define 标识符 当用...
1. 宏参数和#define 定义中可以出现其他#define定义的符号。但是对于宏,不能出现递归。 2. 当预处理器搜索#define定义的符号的时候,字符串常量的内容并不被搜索。 七、宏与函数的对比 宏通常被应用于执行简单的运算。 比如在两个数中找出较大的一个时,写成下面的宏,更有优势一些。
在C语言中,可以使用#define关键字来定义函数式宏。函数式宏是一种宏定义,可以带有参数,并且在使用时可以替换为带有参数的表达式或语句。 例如,下面是一个简单的函数式宏定义,用于计算两个数的和: #define ADD(x, y) ((x) + (y)) 复制代码 在上面的示例中,ADD是宏的名称,(x, y)是宏的参数列表,((x...
你可以定义具有形式参数(简称“形参”)的宏。当预处理器展开这类宏时,它先使用调用宏时指定的实际参数(简称“实参”)取代替换文本中对应的形参。带有形参的宏通常也称为类函数宏(function-like macro)。 可以使用下面两种方式定义带有参数的宏: #define 宏名称( [形参列表] ) 替换文本 ...