预编译头,重新包含文件和智能感知

Precompiled headers, re-including files and Intellisense

本文关键字:文件 智能 感知 新包含 编译      更新时间:2023-10-16

我有一个预编译的头文件,其中包含了各种第三方库的include,例如:

#ifndef PRECOMPILED_H
#define PRECOMPILED_H
#include "booststuff.h"
#include "luastuff.h"
#endif

其中booststuff.h luaststuff .h是我的项目头文件,只包括各种boost/lua相关的东西,并设置一些类型定义/使用/命名空间别名。

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

在cpp文件中,我也相当小心地#include "booststuff.h",在我实际使用它的地方(我有时禁用预编译头文件来测试这一点)。然而,我最近一直在想这是否是个好主意。所以:

  • 如果我再次包含一个已经包含在预编译头中的文件,会发生什么不好的事情吗(我不明白为什么会这样,但我已经看到了关于头必须包含"以相同的顺序"的事情,而不是真正理解它们是关于什么的)?

  • 它是否影响智能感知(不可用的慢与一个相当小的项目)?我很乐意放弃一些可移植性来获得更好的智能感知,因为我目前不想换平台。

如果每个包含文件中都有#pragma once,编译器将在第二次和后续尝试包含该文件时完全跳过读取该文件。虽然没有明确说明,但我认为预编译的头文件也会跟踪这些信息。