前言:
今天我们对“c语言宏定义表达式的括号”都比较关切,朋友们都想要了解一些“c语言宏定义表达式的括号”的相关资讯。那么小编同时在网上网罗了一些对于“c语言宏定义表达式的括号””的相关知识,希望大家能喜欢,我们快快来了解一下吧!什么是预处理命令
在单片机程序中,经常看到以“#”开头的语句,这些语句就是预处理命令,例如文件包含命令#include,宏定义命令#define等。
预处理命令在源程序中的位置
在程序中,这些预处理命令放在函数体之外i,并且一般都放在源文件的前面,即程序开始之前,因此它们也被称为预处理部分。
什么是预处理
预处理是指在对程序进行编译的第一遍扫描(词法扫描和语法扫描)之前所做的工作。当对一个源程序进行编译时,系统将自动引用预处理程序对源代码中的预处理部分进行处理。
宏定义
在C语言程序中,使用一个标识符来表示一个字符串的方法,称之为“宏”,这个标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”都用宏定义中的字符串替换,称为“宏代换”或“宏展开”。
宏定义的种类
“宏”分为有参数和无参数两种。
无参宏定义
形式为:#define 标识符 字符串
“#”表示这是一条预处理命令,define为宏定义命令;“标识符”为所定义的宏名;“字符串”可以是常数、表达式、字符串等。
为什么要用宏定义
一般情况下,常对程序中反复使用的表达式进行宏定义
无参宏定义实例
源代码如下
仿真电路图如下
运行结果如下
说明:
1、上例程序中定义了两个宏定义,我们可以观察程序的执行结果,虽然这两个宏的表达式一样,但是这两个宏的执行结果是不一样的。
2、上面示例中,两个宏的表达式一样,但由于一个表达式被括号括起来了,另一个表达式没有被括号括起来,导致计算结果不一样,所以在定义宏的时候,一定要注意,应保证宏代换之后的正确性。
宏定义的注意事项
1、预处理命令只是对宏进行宏代换,不做检查,如果有错误,只能在编译后,程序运行中才能发现
2、宏定义不是语句,在行末不用加分号,如果加上分号,则会连分号一起进行宏代换
3、宏定义必须写在函数之外,起作用域为从宏定义命令开始到源程序结束,如果要终止其作用域,则可使用#undef命令。
例如
4、宏名如果在程序中用引号括起来,则预处理程序不对其进行宏代换。
例如
程序执行结果为
5、宏定义允许嵌套,在宏定义的字符串里,可以使用已经定义的宏名。在宏代换时由于处理程序层层代换。
例如
运行结果为
6、习惯上,宏名用大写字母表示,以便于变量名区别,但是也允许用小写字母表示
7、可用宏定义表示数据类型,以使书写方便
例如
#define uch unsigned char
在程序中可用uch来做变量说明
例如
uch 5,100;
应注意宏定义表示数据类型与typedef定义数据说明符的不同。宏定义只是简单的字符串代换,是在预处理时完成的。而typedef是在编译时处理的,它不是简单的代换,而是对类型说明敷重新命名。被命名的标识符具有类型定义的说明的功能。
标签: #c语言宏定义表达式的括号