c语言类函数宏 c语言宏详解( 二 )


#define ABS(x) ( (x)0?(x):-(x) )
使用上述命令就可以使用宏定义绝对值 。
二、关于宏定义语法说明
1、定义宏的语法
#define标识符常量//注意, 最后没有分号
2、语法说明
#define 的功能是将标识符定义为其后的常量 。一经定义,程序中就可以直接用标识符来表示这个常量 。宏定义看似和变量定义一样 , 但是完全不是一个概念 。
要区分开!变量名表示的是一个变量,但宏名表示的是一个常量 。可以给变量赋值,但绝不能给常量赋值 。
宏所表示的常量可以是数字、字符、字符串、表达式 。其中最常用的是数字 。
三、关于ABS函数定义说明
1、语法定义
int abs(int x)
其中x表示要求绝对值的数 。
2、语法解释
求整数的绝对值 。需要引用头文件math.h 或者 stdlib.h
3、特别注意
x必须是正整数或者正负数 。不可以是浮点数类型 。
扩展资料
一、C语言宏的定义
采用命令 #define 来定义宏 。该命令允许把一个名称指定成任何所需的文本 。
例如一个常量值或者一条语句 。在定义了宏之后 , 无论宏名称出现在源代码的何处,预处理器都会把它用定义时指定的文本替换掉 。
二、没有参数的宏
1、语法
#define 宏名称 替换文本
其中“替换文本”前面和后面的空格符不属于替换文本中的内容 。替代文本本身也可以为空 。
2、实例
#define TITLE "*** Examples of Macros Without Parameters ***"
#define BUFFER_SIZE (4 * 512)
#define RANDOM (-1.0 + 2.0*(double)rand() / RAND_MAX)
三、带参数的宏
1、定义
定义具有形式参数(简称“形参”)的宏 。当预处理器展开这类宏时,它先使用调用宏时指定的实际参数(简称“实参”)取代替换文本中对应的形参 。带有形参的宏通常也称为类函数宏(function-like macro) 。
2、语法
#define 宏名称( [形参列表] ) 替换文本
#define 宏名称( [形参列表 ,] ... ) 替换文本
C语言-函数式宏 函数式宏(function-like macro)较之对象式宏可以进行更复杂的代换 。
函数式宏 sqr 是在编译时展开并填入程序的 , 因此 只要是能用双目运算符 * 进行乘法计算的数据类型,都能使用函数式宏。
函数定义则需为每个形参都定义各自的数据类型,返回值的类型也只能为一种 。就这点而言,函数较为严格 。
函数为我们默默无闻地进行了一些复杂处理,如:
而函数式宏所做的工作只是宏展开和填入程序,并不进行上述处理 。
根据以上特征,函数式宏或许能使程序的运行速度稍微提高一点,但是程序自身却有可能变得臃肿。
函数式宏在使用上必须小心谨慎 。例如,sqr(a++) 展开后 ((a++) * (a++))。每次展开 ,  a 的值都会自增两次 。在不经意间表达式被执行了两次,导致程序出现预料之外的结果,我们称这种情况为宏的 副作用(side effect)。
C语言类函数宏和一般函数的区别:在C及C++语言中允许用一个标识符来表示一个字符串,称为宏,该字符串可以是常数、表达式、格式串等 。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换 , 这称为“宏代换”或“宏展开” 。
【c语言类函数宏 c语言宏详解】关于c语言类函数宏和c语言宏详解的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

推荐阅读