十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
在C语言源程序中,允许用一个标识符来表示一个字符串,称为宏,宏定义是由源程序中的宏定义命令完成的,宏替换是由预处理程序自动完成的。宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。
网站建设哪家好,找成都创新互联!专注于网页设计、网站建设、微信开发、微信小程序定制开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了砚山免费建站欢迎大家使用!
扩展资料:
宏(Macro),是一种批量处理的称谓。计算机科学里的宏是一种抽象,它根据一系列预定义的规则替换一定的文本模式。
计算机语言如C语言或汇编语言有简单的宏系统,由编译器或汇编器的预处理器实现。C语言的宏预处理器的工作只是简单的文本搜索和替换,使用附加的文本处理语言如M4,C程序员可以获得更精巧的宏。
参考资料:
宏定义百度百科
#define M(a) a*a
宏里面描述的a相当于函数的参数,它和你描述的主函数的a是没关系的,预处理时对宏只是做简单的替换。。例如
#include "stdio.h"
#define M(a) a*a
int main()
{
int i = 10;
printf("%d\n",M(i));
return 0;
}
这里会把M(i)替换成 i*i。。。。
主要用于函数重定义,通用性,可以用一个变量符号替代另一个变量符号
格式:#define M(x,y) x+y
在主程序里写入z=M(6,9);等价于z=6+9;而写成z=(6-8,9);等价于z=6-8+9 ;直接代入
还有就是 :#define Uint unsigned int 即用 Uint 代替unsigned int 便于书写,还有就是不同操作系统的通用变量识别
这个问题描述的不够详细。
宏定义中有一个很重要的事情就是要给参数加上括号,否则就有可能影响最终的结果。
因为宏只是简单的字符替换。
如:
#define TIME_TWO(n) (n*2)
//当你参数是单一值是,看起来无影响,比如
TIME_TWO(3)
//会被正确的替换为如下,结果为6
(3*2)
//但如果你的参数本身就是一个表达式,比如
TIME_TWO(3+2)
//那么就会被替换为如下,结果为7,不符合预期
(3+2*2)
//所以宏定义中需要包裹参数防止优先级影响结果
#define TIME_TWO_PREFECT(n) ((n)*2)
//同样调用
TIME_TWO_PREFECT(3+2)
//就会被正确的替换为如下,结果为10,符合预期
((3+2)*2)