2

我有一个预编译的标头,其中包含各种 3rd 方库的包含,例如:

#ifndef PRECOMPILED_H
#define PRECOMPILED_H

#include "booststuff.h"
#include "luastuff.h"

#endif

booststuff.h和luastuff.h是我项目的头文件,它们只包含各种 boost / lua 相关的东西,并设置了一些 typedefs / usings / 命名空间别名。

我在 Visual Studio (2012) 中以通常的方式设置了预编译头文件,并使用强制包含选项将其包含在每个 cpp 文件中。

在 cpp 文件中,我也非常小心地使用了 #include "booststuff.h"(我有时会禁用预编译的头文件来测试它)。但是,我最近一直在想这是否是一个好主意。所以:

  • 如果我再次包含一个已经包含在预编译头文件中的文件,是否会发生任何不好的事情(我不明白为什么会这样,但我已经看到关于头文件必须“以相同的顺序”包含的事情,并且没有真正理解他们在说什么)?

  • 它是否会影响 Intellisense(对于一个相当小的项目来说速度非常慢)?我很乐意放弃一些可移植性以获得更好的 Intellisense,因为我目前不想切换平台。

4

1 回答 1

2

如果每个包含文件都包含#pragma once在其中,编译器将在第二次和后续尝试包含该文件时完全跳过读取该文件。它没有明确说明,但我假设预编译的标头也跟踪此信息。

于 2013-04-12T16:50:09.957 回答