写代码的时候发现一个“问题”,我们一般用#ifdef包裹头文件,保证头文件只展开一次,否则会出现重复定义。 那么多个c文件包含同一个头文件时,后面的c文件是否就无法获取h文件里的内容了呢? 当然,通过实际编程经验,我们都知道答案是否定的,但是怎么解释呢?
这个问题提出来说明提问人对于编译-链接过程不够了解。
【回答】不矛盾,头文件仅展开一次是对于一个c文件的编译过程来说的,并不是整个工程的构建,如果一个c文件根据间接多次包含同一个头文件,那么头文件确实只展开一次。 但是对于另外一个c文件,编译是一个崭新的过程,和上一个编译的c文件就无关了,所以两者并不影响。