考虑到这个例子,我一直想知道 msvc++ 2008 编译器是否处理同一文件的多个 header 包含:
main.cpp
#include "header.h"
#include "header.h"
编译器会多次包含这个文件还是只包含一个? (我知道我可以使用 #ifndef “技巧”来防止这种情况发生) 另外,如果我包含包含 10 个函数的“header.h”,但我只调用或使用 2 个,它是否仍然包含所有 10 个或仅包含我需要的 2 个以及它们的所有需求?
最佳答案
#include
基本上是“复制粘贴”的同义词。如果您执行相同的 #include
,则该头文件的内容将按顺序复制和粘贴两次。
关于你的第二个问题,其实没有道理。 #include
由预处理器 执行,它在编译器 和链接器 之前运行。预处理器不知道也不关心头文件的内容是什么,它只是简单地将其复制并粘贴进去。链接器可能能够消除不必要的功能,但这完全独立于预处理器。
关于c++ - MSVC 2008 Express Edition 编译器做什么和不做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6358546/