c++ - MSVC 2008 Express Edition 编译器做什么和不做什么

标签 c++ visual-studio-2008 compiler-construction compiler-optimization

考虑到这个例子,我一直想知道 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/

相关文章:

c++ - 是否有一个 STL 容器将元素数组存储在连续内存中,其中元素大小在运行时指定?

c++ - 由于删除而崩溃(尝试处理异常...)

visual-studio - 如何更改 "devenv"命令位置?

c# - Exchange Server 2007 传输代理问题

c - 验证解析器中的数据类型/结构

c++ - SDL_Mixer 崩溃一次;现在所有使用 SDL_Mixer 的程序都会在初始化时崩溃

c++ - 根据模板参数大小在成员函数中使用不同的返回类型

c# - 如何在构造函数中查找参数数量

objective-c - 使用 Clang 将关键字添加到 Objective-C

java - 是否可以将不同的编译器嵌入到我的应用程序中?