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

标签 c++ visual-studio-2012 intellisense precompiled-headers

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

#ifndef PRECOMPILED_H
#define PRECOMPILED_H

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

#endif

其中 booststuff.hluastuff.h 是我项目中的头文件,仅包含各种 boost/lua 相关内容并设置一些 typedefs/usings/命名空间别名.

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

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

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

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

最佳答案

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

关于c++ - 预编译头文件,重新包含文件和智能感知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15976533/

相关文章:

javascript - 这是让 ASP.NET MVC 和 javascript intellisense 发挥良好作用的 "correct"解决方案吗?

c++ - '运营商' : function as left operand

c++ - 在 visual studio 中使用 xtensor 时的尖括号 <> 问题

asp.net-mvc - 使用 TypeScript 0.9.1.1 将 TypeScript 文件添加到 MVC4 应用程序

C#:将扩展方法添加到基类,以便它们出现在派生类中

node.js - 如何在 VS Code 中启用 Node.js Intellisense?

C++ 字符串精确 float

c++ - 接受带有 X 参数的可调用仿函数的模板函数

c# - 在 Visual Studio 中合并两个项目并相互访问文件

c++ - 使用函数构造 std::thread