这里还有一个概念,就是宏定义,例如:#define
A
b+c
宏定义出现在c语言的源代码中,在正式编译前,编译器会进行预处理,而预处理过程包括一个很重要的任务(当然还有其它任务),就是替换宏,这种替换是一种机械的替换,并不考虑标识符的语法,语义,也就是说当遇到上面的A时,会直接替换成b+c。
还有一种更加灵活的宏,是带参数的宏,例如:#define
F(a,b)
(a)+(b)
替换时会根据引入参数,这样,F(1,2)会被替换成(1)+(2)。
宏定义是C语言提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。宏定义和操作符的区别是:宏定义是替换,不做计算,也不做表达式求解。
1. 不带参数的宏定义:
宏定义又称为宏代换、宏替换,简称“宏”。
格式: #define 标识符 字符串
其中的标识符就是所谓的符号常量,也称为“宏名”。
预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。
掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。
(1)宏名一般用大写
(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义
(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。
(4)宏定义末尾不加分号;
(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。
(6)可以用#undef命令终止宏定义的作用域
(7)宏定义可以嵌套
(8)字符串" "中永远不包含宏
(9)宏定义不分配内存,变量定义分配内存。
2. 带参数的宏定义:
除了一般的字符串替换,还要做参数代换。
您好!很高兴为您解答。宏定义的用处主要体现在便于程序的调试上。
比如我要写一个计算圆相关信息(周长、面积等等)的程序,需要定义π(3.14):
#define PI 3.14
那么势必PI这个标识可以在程序中代替所有的3.14,如果我发现计算的精度不够,需要π的更多有效位时,则只需将宏定义修改为:
#define PI 3.1415926
那么程序中的所有PI都会变成3.1415926
可想而知,没有宏定义,我需要将代码中全部的3.14都手动改为3.1415926
即使是定义double PI=3.14,你会发现当代码很长时,在乱军丛中找到一行“double PI=3.14”是多么困难的事。
又比如数组,定义时是不能出现“int a[n]”这样的定义的,编译通不过,因为必须规定数组长度。
但如果是:
#define N 10
int a[N]
就可以,对宏定义编译器是不作检查的,应为宏定义只是简单的符号替换。所以一旦我还没有确定要定义多长的数组,但又想通过编译时,就可以提现宏定义的用处了。
如此看来,宏定义提升了程序编写的灵活性。
望采纳~如您还有不解,欢迎追问~