#define MAX(x,y) (((x)>(y))?(x):(y))程序运行的结果就变成了-1。因为整个表达式都用括号包住了,所以替换后也没有破坏原有的计算顺序,看起来好像万无一失了,但其实脆弱的很。我们只要给宏函数的参数传入不同类型的数据,比如将上面程序中的int类型变量y定义成float类型,比如:float y = 3.5;其...
C语言的宏文本替换,是通过预处理指令define实现的,#define的使用场景主要有:1)直接使用标识符不定义具体常量的标识符用法 2)替换常量的对象式宏(Object-like macros)3)模拟函数功能的函数式宏(Function-like macros)4)替换文中支持可变的参数数量的可变参宏 5)#和##运算法的用法等。define 标识符 当用...
简介:C语言宏定义(#define定义常量、#define定义宏、 带有副作用的宏参数、 宏替换的规则、 宏函数的对比) 一、#define的基本语法 在C语言中,常量是使用频率很高的一个量。常量是指在程序运行过程中,其值不能被改变的量。常量常使用#define来定义。 使用#define定义的常量也称为符号常量,可以提高程序的...
①宏常量 我们最常使用到的#define的用法就是用#define来定义一个符号常量,而要修改时,只需修改#define这条语句就行了,不必每处代码都修改 基本语法: #define name stuff 例: #define MAX 1000 #define reg register //为 register这个关键字,创建一个简短的名字 #define do_forever for(;;) /...
(1)宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。 看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义: #define MAX( a, b) ((a) > (b) (a) : (b) ) 其次,把它用函数来实现: int max( int a, int b) { return (a > b a : b) } 很显然,我们不会选择用函数来...
我们来看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义: #define MAX( a, b) ( (a) > (b) (a) : (b) ) 其次,把它用函数来实现: int max( int a, int b) { return (a > b a : b) } 很显然,我们不会选择用函数来完成这个任务,原因有两个:首先,函数调用会带来额外的开销,...
注意:该“函数”定义为(a + b),在这里加括号的原因是,宏定义只是在预处理阶段做了简单的替换,如果单纯的替换为a + b时,当你使用5 * add(2, 3)时,被替换为5 * 2 + 3,值为13,而非5 * (2 + 3),值为25。 加续行符换行 在#define的宏定义的内容过长时,我们的编译器中一行放不下,我们还可以...
在C语言中,可以使用#define关键字来定义函数式宏。函数式宏是一种宏定义,可以带有参数,并且在使用时可以替换为带有参数的表达式或语句。 例如,下面是一个简单的函数式宏定义,用于计算两个数的和: #define ADD(x, y) ((x) + (y)) 复制代码 在上面的示例中,ADD是宏的名称,(x, y)是宏的参数列表,((x...
(1) 简单的宏定义 格式:#define <宏名/标识符> <字符串> eg:#define PI 3.1415926 说明: ①宏名一般用大写 ②宏定义末尾不加分好; ③可以用#undef命令终止宏定义的作用域 ④宏定义可以嵌套 ⑤字符串“”中永远不包含宏 ⑥宏替换在编译前进行,不分配内存,变量定义分配内存,函数调用在编译后程序运行时进行,...