#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))
(1)宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。 看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义: #define MAX( a, b) ((a) > (b) (a) : (b) ) 其次,把它用函数来实现: int max( int a, int b) { return (a > b a : b) } 很显然,我们不会选择用函数来...
下面总结和宏和函数的不同之处,以供大家写代码时使用,这段总结摘自《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来定义。
C语言的宏文本替换,是通过预处理指令define实现的,#define的使用场景主要有:1)直接使用标识符不定义具体常量的标识符用法 2)替换常量的对象式宏(Object-like macros)3)模拟函数功能的函数式宏(Function-like macros)4)替换文中支持可变的参数数量的可变参宏 5)#和##运算法的用法等。define 标识符 当用...
1. 宏参数和#define 定义中可以出现其他#define定义的符号。但是对于宏,不能出现递归。 2. 当预处理器搜索#define定义的符号的时候,字符串常量的内容并不被搜索。 七、宏与函数的对比 宏通常被应用于执行简单的运算。 比如在两个数中找出较大的一个时,写成下面的宏,更有优势一些。
C语言中宏函数的定义和用法 描述 宏函数是一种特殊的函数宏,与普通函数宏不同的是,它可以拥有多条语句和局部变量,从而实现更复杂的功能。它的定义类似于普通函数,但用大括号包裹起来,并以分号结束每个语句。 #define TEST(a, b) ({ int temp = a;...
在C语言中,可以使用#define关键字来定义函数式宏。函数式宏是一种宏定义,可以带有参数,并且在使用时可以替换为带有参数的表达式或语句。 例如,下面是一个简单的函数式宏定义,用于计算两个数的和: #define ADD(x, y) ((x) + (y)) 复制代码 在上面的示例中,ADD是宏的名称,(x, y)是宏的参数列表,((x...