c语言用什么进行宏定义?
一、c语言宏定义
在 C 语言中,可以采用命令 #define 来定义宏。该命令允许把一个名称指定成任何所需的文本,例如一个常量值或者一条语句。在定义了宏之后,无论宏名称出现在源代码的何处,预处理器都会把它用定义时指定的文本替换掉。
#define ARRAY_SIZE 100
double data[ARRAY_SIZE];
这两行代码为值 100 定义了一个宏名称 ARRAY_SIZE,并且在数组 data 的定义中使用了该宏。惯例将宏名称每个字母采用大写,这有助于区分宏与一般的变量。上述简单的示例也展示了宏是怎样让 C 程序更有弹性的。
通常情况下,程序中往往多次用到数组(例如上述 data)的长度,例如,采用数组元素来控制 for 循环遍历次数。当每次用到数组长度时,用宏名称而不要直接用数字,如果程序的维护者需要修改数组长度,只需要修改宏的定义即可,即 #define 命令,而不需要修改程序中每次用到每个数组长度的地方。
在翻译的第三个步骤中,预处理器会分析源文件,把它们转换为预处理器记号和空白符。如果遇到的记号是宏名称,预处理器就会展开(expand)该宏;也就是说,会用定义的文本来取代宏名称。出现在字符串字面量中的宏名称不会被展开,因为整个字符串字面量算作一个预处理器记号。
无法通过宏展开的方式创建预处理器命令。即使宏的展开结果会生成形式上有效的命令,但预处理器不会执行它。
在宏定义时,可以有参数,也可以没有参数。
延伸阅读:
二、带参数的宏
你可以定义具有形式参数(简称“形参”)的宏。当预处理器展开这类宏时,它先使用调用宏时指定的实际参数(简称“实参”)取代替换文本中对应的形参。带有形参的宏通常也称为类函数宏(function-like macro)。
可以使用下面两种方式定义带有参数的宏:
#define 宏名称( [形参列表] ) 替换文本
#define 宏名称( [形参列表 ,] … ) 替换文本
“形参列表”是用逗号隔开的多个标识符,它们都作为宏的形参。当使用这类宏时,实参列表中的实参数量必须与宏定义中的形参数量一样多(然而,C99 允许使用“空实参”,下面会进一步解释)。这里的省略号意味着一个或更多的额外形参。
当定义一个宏时,必须确保宏名称与左括号之间没有空白符。如果在名称后面有任何空白,那么命令就会把宏作为没有参数的宏,且从左括号开始采用替换文本。
常见的两个函数 getchar()和 putchar(),它们的宏定义在标准库头文件 stdio.h 中。它们的展开值会随着实现版本不同而有所不同,但不论何种版本,它们的定义总是类似于以下形式:
#define getchar() getc(stdin)
#define putchar(x) putc(x, stdout)
当“调用”一个类函数宏时,预处理器会用调用时的实参取代替换文本中的形参。C99 允许在调用宏的时候,宏的实参列表可以为空。在这种情况下,对应的替换文本中的形参不会被取代;也就是说,替换文本会删除该形参。然而,并非所有的编译器都支持这种“空实参”的做法。
以上就是关于c语言宏定义的内容希望对大家有帮助。

相关推荐HOT
更多>>
如何使用Pandas处理Excel?
如何使用Pandas处理Excel?做过行政或者人事,或者对此有过了解的小伙伴,一定对下发各个部分的表有着非常深刻的印象,最常见的就是需要我们将一...详情>>
2023-11-14 07:43:15
python中np.insert()函数的使用方法
python中np.insert()函数的使用方法在numpy数组操作中,np.append()方法可以在每行每列的最后添加数据,但其位置是规定的,那如果想要指定添加...详情>>
2023-11-14 05:06:13
SVM在python中的原理如何理解?
SVM在python中的原理如何理解?在python中除了编程化的知识点外,对于数学方法的算法也有所涉及,SVM就是一种很好地体现。我们学习过数学中的坐...详情>>
2023-11-14 04:30:04
python处理绝对路径和相对路径函数有哪些?
python处理绝对路径和相对路径函数有哪些?绝对路径和相对路径是什么?绝对路径:从根文件夹开始,Windows系统以盘符(C:)作为根文件夹,OSX或Lin...详情>>
2023-11-14 03:33:02热门推荐
如何使用python any()判断多元素?
沸如何使用Pandas处理Excel?
热python函数中的参数有哪些?
热python中pygal模块如何使用?
新Python的excel处理操作
python中doctest库是什么?
python中series是什么意思
python中np.insert()函数的使用方法
SVM在python中的原理如何理解?
Python描述符中有哪三种方法?
python处理绝对路径和相对路径函数有哪些?
python单继承和多继承如何定义?
python封装中的私有如何理解?
python模块引入的三种方式
技术干货






