问题标签 [stdafx.h]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
6745 浏览

c++ - 有没有办法在 VC++ 中使用预编译的头文件而不需要 stdafx.h?

我有一堆需要编写单元测试的遗留代码。它在任何地方都使用预编译的头文件,因此几乎所有的 .cpp 文件都依赖于 stdafx.h,这使得为了编写测试而打破依赖关系变得困难。

我的第一直觉是删除所有这些 stdafx.h 文件,这些文件在大多数情况下包含#include 指令,并根据需要将这些 #include 直接放在源文件中。

这将使得有必要关闭预编译的头文件,因为它们依赖于像 stdafx.h 这样的文件来确定预编译的头文件停止的位置。

有没有办法在没有 stdafx.h 依赖项的情况下保留预编译的头文件?有没有更好的方法来解决这个问题?

0 投票
4 回答
4611 浏览

c++ - 为什么 stdafx.h 以它的方式工作?

像往常一样,当我的大脑在弄乱我自己无法弄清楚的事情时,我会向你们寻求帮助:)

这次我一直想知道为什么 stdafx.h 会这样工作?据我了解,它做了两件事:

  • 包括我们 可能(?)使用并且很少更改的标准标题
  • 在不再预编译代码时用作编译器书签。

现在,这两件事对我来说似乎是两个非常不同的任务,我想知道他们为什么不做两个单独的步骤来照顾它们?对我来说,让#pragma-command 来做书签似乎是合理的,并且可以选择在 windows.h 的行中添加一个头文件来包含常用的头文件......这让我进入了我的下一个要点:为什么我们被迫通过 stdafx.h 包含常用的标头?就个人而言,我不知道我使用的任何经常使用的标头,我还没有为自己做包含 - 但也许这些标头对于 .dll 生成是必需的?

提前谢谢

0 投票
3 回答
9823 浏览

.net - StdAfx.h 中的“Afx”是怎么回事?

我只是好奇 Afx 代表什么。那么 FxCop 中的 Fx 呢?

0 投票
6 回答
67731 浏览

c++ - stdafx.h:我什么时候需要它?

我看到了很多代码,包括 stdafx.h。说,我想要预编译的头文件。我自己手动包含所有必需的系统标头。在那种情况下,我应该知道我需要在哪里有其他充分的理由stdafx.h吗?

0 投票
10 回答
36228 浏览

c++ - 在跨平台代码中处理 stdafx.h

我有一个基于 Visual Studio C++ 的程序,它使用预编译的头文件 ( stdafx.h)。现在我们正在使用 gcc 4.x 将应用程序移植到 Linux。

问题是如何在两种环境中处理预编译的头文件。我用谷歌搜索但无法得出结论。

显然我想离开stdafx.hVisual Studio,因为代码库非常大,而且预编译的头文件会增加编译时间。

但问题是在 Linux 中要做什么。这是我发现的:

  1. 保持stdafx.h原样。gcc 编译代码的速度比 VC++ 快得多(或者它只是我的 Linux 机器更强大...... :)),所以我可能对这个选项感到满意。
  2. 使用此处的方法-stdafx.h看起来像(USE_PRECOMPILED_HEADER仅针对 VS 设置):

    /li>
  3. 使用此处的方法- 编译 VC++/FI隐式包含stdafx.h在每个 cpp 文件中。因此,在 VS 中,您的代码可以轻松切换以在没有预编译头文件的情况下进行编译,并且无需更改任何代码。
    我个人不喜欢依赖,而且混乱stdafx.h正在推动一个大的代码库。因此,这个选项对我很有吸引力——在 Linux 上你没有stdafx.h,同时仍然能够在 VS 上打开预编译的头文件/FI

  4. 在 Linux 上stdafx.h仅编译为预编译头文件(模仿 Visual Studio)

你的意见?有没有其他方法来处理这个问题?

0 投票
1 回答
728 浏览

c++ - 关于 Visual C++ 中预编译头的问题

如果我将一个标头 (ah) 放入 stdafx.h 并且该标头包含另一个在 stdafx.h 中未提及的标头 (bh),那么每次有人包含 ah 时都会访问 bh 还是将其编译为 ah 的一部分?如果编译成ah,直接包含bh会怎样?这会被预编译吗?

我提出这个问题的动机是我正在尝试为我正在使用的软件优化 stdafx.h 文件的内容。重建和增量构建时间对我们都很重要。我想知道是否可以简单地在所有 .cpp 文件中搜索#include 指令并计算每个文件被包含的次数。经常包含的文件可能是 stdafx.h 文件的良好候选者。当然,如果我不仅要考虑包含哪些文件,还要考虑包含的文件包含哪些文件,那么这种策略完全是假的。

我怀疑这很重要,但我们使用的是 Visual Studio 2005。

0 投票
2 回答
3173 浏览

conditional-compilation - 为什么我无法#ifdef stdafx.h?

我试图在我的 .cpp 文件中包含 2 个特定于平台的stdafx.h文件,但是当我尝试 #ifdef 时编译器不满意。

您可能想知道为什么我在 Mac 代码中使用 stdafx.h,但目前这并不重要 :)。

当我尝试在 Windows 上编译代码时,我收到:Fatal Error C1018。我尝试用#ifdef 将其他头文件包含在同一个文件中,编译器很高兴。因此,看起来 Windows 不喜欢 stdafx.h 被 #ifdef-ed,或者 Windows 只允许#include stdafx.h 成为文件中的第一行。

所以我的问题是,为什么?

0 投票
3 回答
4611 浏览

c++ - 使用 Boost 时的内存泄漏检测

我想使用 _CRTDBG_MAP_ALLOC 获取内存泄漏信息,尤其是文件和行号,但最后我没有得到它们。我只得到这样的东西:

{130} 0x00695128 处的普通块,16 字节长。数据:<\E Pi > 5C A5 45 01 02 00 00 00 01 00 00 00 E8 50 69 00

我已经看到这应该在所有包括之前:

有些人建议在所有源文件中包含所有内容后添加此内容:

但是,在 main.cpp 中,如果我显式添加内存泄漏,它会在我的输出中与行号一起出现!所以它有效,但并非适用于所有...

当我使用 Boost 库时,我怀疑内存泄漏都发生在这些......(shared_ptr?)的某个地方。但是如何知道这些内存泄漏是从哪里来的呢?

0 投票
2 回答
469 浏览

.net - c++ 致命错误 c1083 项目以前很好,现在怎么办?

我有一个 (com) c++ 项目,它使用 (.net) c++ dll。该项目正在编译并运行正常。

现在,我所做的只是对 dll 进行更改,并且在重新编译我的(com)项目时,我收到了一个致命错误 c1083-无法打开包含文件 stdafx.h。

这意味着什么?

0 投票
4 回答
21828 浏览

c++ - stdafx.h 的目的

该文件的目的是什么以及预编译头stdafx.h文件的含义是什么?