为啥默认情况下 #include<bits/stdc++.h> 在 Windows 上不起作用?
Posted
技术标签:
【中文标题】为啥默认情况下 #include<bits/stdc++.h> 在 Windows 上不起作用?【英文标题】:Why #include<bits/stdc++.h> does not work by default on windows?为什么默认情况下 #include<bits/stdc++.h> 在 Windows 上不起作用? 【发布时间】:2021-03-28 05:05:25 【问题描述】:我已经在 windows 上安装了 mingw-w64 编译器。但是在 c++ 程序预处理器指令中使用 #include
【问题讨论】:
不使用那个? c++ - Why should I not #include <bits/stdc++.h>? - Stack Overflow<bits/stdc++.h>
不是标准 C++,它不必存在。
但是使用#includebits/stdc++.h
不是标准头文件。因此,除非使用某些特定的编译器,否则不能保证它可以工作。甚至同一编译器的不同版本也可能提供也可能不提供。
当它可用时,bits/stdc++.h
只是 #include
s 每个标准 C++ 头文件。这对于刚开始使用该语言的人来说可能是有意义的,因此他们不必担心弄清楚他们需要哪些包括他们不需要哪些。但是使用它会减慢编译时间,在某些情况下可能会使可执行文件比它需要的大,并且(正如您所发现的)使代码不可移植。
对此的唯一解决方案是不使用它,而是使用#include
只是您需要的特定标头。您真的“应该”在编程时这样做;当您需要在标头中声明某个函数时,您可以包含该标头,然后编写函数调用。一些 IDE 会告诉您每个功能需要哪些内容。
但如果你已经把所有的代码都写好了,你就可以作弊。只需删除#include <bits/stdc++.h>
行并尝试编译。如果编译器抱怨缺少或未定义的符号,请搜索该符号以找出它来自哪个标头,并#include
它。冲洗并重复,直到你得到一个干净的编译。
【讨论】:
按照上一段中的步骤将获得要编译的代码,但结果不一定是可移植的。标准库头文件允许定义该头文件不需要的其他符号,因此添加一个头文件可能会修复一些其他缺失的符号。当您移至不同的编译器时,它们将是未定义的,您必须添加更多#include
指令。
@PeteBecker 是的,这样的事情就是我称之为“作弊”的原因。但我认为这不会太糟糕,因为到那时 OP 将知道如何查找标准头文件。以上是关于为啥默认情况下 #include<bits/stdc++.h> 在 Windows 上不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我可以在不使用 std::getline 的情况下调用 getline?
为啥 wctype.h 中的函数在没有 setlocale() 的情况下不起作用?