#include <bits/stdc++.h>在Visual Studio中无法编译

26

最近我看到#include <bits/stdc++.h>可以引用所有的标准库和stl头文件。但是当我在visual studio 2013编译以下代码段时,它会报错:error C1083: Cannot open include file: 'bits/stdc++.h': No such file or directory。但是在codeblocks中它却可以完美地工作。有没有什么方法可以避免这个错误?

#include <bits/stdc++.h>

using namespace std;

int main()
{

}   

我在一些帖子中看到过“头文件不是C++标准的一部分,因此不可移植”,应该避免使用。但我认为在竞赛编程中很有帮助。


9
那不是一个标准头。不要依赖于实现细节。如果你真的需要一个包含所有其他头部的头(你真的不想要那个),请使用自己的头部。 - chris
2
因为它们使用不同的标准库实现。 - chris
16
因为只有GCC(Code::Blocks使用的编译器)有那个文件,所以它在VS2013上无法工作。这就好比在Linux系统上问为什么无法包含<Windows.h>的文件。 - Wyzard
1
投票重新开放。这绝对不是为什么我不应该#include <bits/stdc++.h>?的重复,而且说它是重复也是有点牵强附会。这个问题寻求解释为什么它不起作用,并将受益于如何使其起作用的解决方案。另一个问题既不寻求这两个东西。那个问题的链接应该在这里作为一个相关问题发布在评论中,而不是一个重复的问题。 - Gabriel Staples
@Tsyvarev,我个人现在不想再添加另一个答案,但我认为“复制gcc头文件”的解决方案是一个很好的解决方案,并且可以进行足够的改进,以便让某人提供一个更好的解决方案来更好地演示和解释它。 - Gabriel Staples
显示剩余4条评论
6个回答

51
有没有避免这个错误的方法?
有:不要使用只由GCC提供而不是Microsoft编译器提供的非标准头文件。
C++标准要求每个编译器都要提供一些头文件,例如iostream和string。但是特定编译器对这些头文件的实现可能依赖于其他非标准头文件,这些头文件也随着编译器一起提供,bits/stdc++.h就是其中之一。
将标准头文件(例如iostream)视为“公共”接口,将编译器特定的内容(如bits/中的所有内容)视为“私有”实现。如果您希望程序在其他编译器甚至是同一编译器的未来版本上可移植,则不应依赖于编译器特定的实现细节。
如果您想要一个包含所有标准头文件的头文件,很容易编写自己的头文件。

18
为了在Visual Studio中使用bits/stdc++.h预处理器,您需要从以下链接下载stdc++.h文件。
  • 从以下链接下载文件:https://mega.nz/file/feIXkY7a#ECkj1bZKA-72dYzatuKsgBQJ4lMe0v81sfxuhyKCNk0
  • 在以下目录中创建bits文件夹:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include
  • 在某些情况下,文件夹C:\Program Files (x86)\Microsoft Visual Studio\2019\可能是空的。在这种情况下,打开VS Code并在顶部输入#include <。您将获得自动完成建议。每个建议旁边都会显示一个路径。复制该路径并粘贴到文件浏览器中。该路径将使您进入上面提到的相同的include文件夹。
  • 创建名为bits的新目录,并将stdc++.h文件粘贴到bits文件夹中。
  • 如果Visual Studio正在运行,请重新启动并使用它

11
请避免使用外部链接,例如 mega 网站。它们很可能会在不久的将来失效。 - Jérôme Richard
1
以下是查找stdc++.h的可靠方法。在您喜欢的搜索引擎上搜索“gnu.org stdc++.h”,它应该会出现在第一次或前几个搜索结果中。 - burnabyRails
5
这是GCC源代码中感兴趣文件的链接: https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/precompiled/stdc%2B%2B.h 正如@JérômeRichard所预测的,回答中的链接已经失效了。 - Gabriel Staples

6
这是非标准头文件,通常是GCC的一部分,被认为是libstdc++的一部分。然而,VS附带了Microsoft自己的STL实现,其中不包含此文件。我建议停止使用它,改为包含必要的标准头文件,如 <iostream><vector><string><algorithm> 等。

-1

要使用bits/stdc++.h,您可以在计算机中创建bits文件夹,并将stdc++.h文件粘贴到bits文件夹中,然后就可以开始了。

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include

-2

我的答案是针对Enterprise 2015,版本4.8.03761,更新3。

当您安装codeblocks时,MinGW((Min)minimalist(G)GNU编译器集合(GCC)for(W)Windows)也被安装了。或者您可以单独安装它。

我认为这个问题是因为Visual Studio在其Include目录中找不到bits/stdc.h(项目-> YourProject属性->配置属性->VC++目录->包含目录->按下下拉箭头-><Edit..> ->评估值)。

您需要进入该目录,并从MinGW安装中粘贴整个bits文件夹,我的位于(C:\ MinGW \ lib \ gcc \ mingw32 \ 8.2.0 \ include \ c ++ \ mingw32)。

一旦完成,我的一侧没有错误。 我希望这个答案能帮助任何想要解决这个问题的人。

谢谢。


你真的需要使用文本格式选项。 - Abhishek Dutt

-3

从官方发布页面安装最新版本的MinGW

然后将bits文件夹复制到

C:\MinGW\lib\gcc\mingw32\6.3.0\include\c++\mingw32\bits

to...(VS2019)

C:\Program Files (x86)\Microsoft Visual Studio\2019\<type>\VC\Tools\MSVC\14.27.29110\include

请注意,根据VS安装和许可证,此处的“Community”/“Professional”可能会有所不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接