当前位置: 首页>移动开发>正文

宏的使用(C语言详解)

在写一个代码生成可执行文件的过程需要经过编译和链接,编译又要经过三部:预处理,编译,汇编。

#define定义的变量和宏就是在预处理阶段会处理的。

注意:在#define定义的宏或变量后面不能加分号(;)

例如: 

宏的使用(C语言详解),第1张

2.带副作用的宏参数

在给宏传参的时候我们尽量避免传一些前缀或后缀++ --这样的参数,这是一些带有副作用的参数

3.函数与宏的区别:

宏的使用(C语言详解),第2张

4.宏替换的规则

在程序中扩展#define定义符号和宏时,需要涉及⼏个步骤。
1. 在调⽤宏时,⾸先对参数进⾏检查,看看是否包含任何由#define定义的符号。如果是,它们⾸先被替换。
2. 替换⽂本随后被插⼊到程序中原来⽂本的位置。对于宏,参数名被他们的值所替换。
3. 最后,再次对结果⽂件进⾏扫描,看看它是否包含任何由#define定义的符号。如果是,就重复上述处理过程。
注意:
1. 宏参数和#define定义中可以出现其他#define定义的符号。但是对于宏,不能出现递归。
2. 当预处理器搜索#define定义的符号的时候,字符串常量的内容并不被搜索

6.##运算符的使用

## 可以把位于它两边的符号合成⼀个符号,它允许宏定义从分离的⽂本⽚段创建标识符。 ## 被称
为记号粘合
这样的连接必须产⽣⼀个合法的标识符。否则其结果就是未定义的。
这⾥我们想想,写⼀个函数求2个数的较⼤值的时候,不同的数据类型就得写不同的函数
比如:

int int_max(int x, int y)
{
    return x>y?x:y;
}

float float_max(float x, float y)
{
    return x>yx:y;
}

这么写很繁琐我们可以用宏定义来写函数

7.宏定义函数

#define Max(type) type type##_max(type x,type y)\
				  {			\
						return x>y?x:y;	\
				  }
这里\为续行符
Max(int)
Max(float)
Max(char)
int main()
{
	printf("%d\n", int_max(5, 9));
	printf("%.2f\n", float_max(5.2, 5.32));
	printf("%c\n", char_max('p', 'h'));
}

https://www.xamrdz.com/mobile/4m61896731.html

相关文章: