条件编译是先判断变量是否被宏定义吗

2019-07-14 15:39发布


条件编译不是先判断变量是否被宏定义,然后再执行下面的语句,为什么这段程序的 __STM32F10x_IT_H 是先条件编译再宏定义??
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
doubleyh
1楼-- · 2019-07-16 11:20
防止头文件重复包含吧
7762642422d
2楼-- · 2019-07-16 14:19
servile 发表于 2018-11-28 13:01
您的意思是头文件里的语句被编译过一次就行了吧,比如函数声明,第一次被某C源文件包含过了,当另一些C源文件想找到相应的函数,包不包含该头文件已经无所谓了,是这个意思吗?

上面的回复说的是为什么要那么写以及其意义是什么。
如果你要引用头文件里面的函数或变量,一定要包含头文件的,跟头文件里面为了防止重复声明的机制无关。
wenxueshu
3楼-- · 2019-07-16 18:51
多个源文件或头文件可能交叉包含这个头文件,如果没用这部分,就重复了报错,这部分是防止重复的
5616asaqwq
4楼-- · 2019-07-16 20:59
 精彩回答 2  元偷偷看……
servile
5楼-- · 2019-07-17 01:54
7762642422d 发表于 2018-11-28 13:56
上面的回复说的是为什么要那么写以及其意义是什么。
如果你要引用头文件里面的函数或变量,一定要包含头文件的,跟头文件里面为了防止重复声明的机制无关。

防止重复声明的机制使得头文件只能被执行一次,那多次包含岂不是多余,难道是为了提高程序的可读性?!
7762642422d
6楼-- · 2019-07-17 07:39
servile 发表于 2018-11-28 14:36
防止重复声明的机制使得头文件只能被执行一次,那多次包含岂不是多余,难道是为了提高程序的可读性?!

你不包含头文件怎么使用它们(头文件中声明的函数和变量)呢(赶紧改掉不声明头文件,什么都放在源文件里面的做法吧!)?
比如对于一个没有#include任何头文件的源文件,要想使用strstr()则必须至少包含string.h头文件。
多个源文件如若都会使用strstr,那么都得至少包含string.h。
你平时发现没有这样做是因为一些头文件已经包含了string.h了,而你只是包含了上层的头文件了。那么多包含自然会有“重复”,使用#ifndef可以避免编译器重复执行声明(这也是不允许的),但你在源文件中包含头文件是要引用一些已经声明的函数,两者不同。
建议你赶紧多读几遍最新版的《C语言程序设计:现代方法》:
https://item.jd.com/10064146.html

一周热门 更多>