Why should I not #include <bits/stdc++.h>?

Lightness Races in Orbit picture Lightness Races in Orbit · Aug 4, 2015 · Viewed 33.6k times · Source

I posted a question with my code whose only #include directive was the following:

#include <bits/stdc++.h>

My teacher told me to do this, but in the comments section I was informed that I shouldn't.

Why?

Answer

Lightness Races in Orbit picture Lightness Races in Orbit · Aug 4, 2015

Including <bits/stdc++.h> appears to be an increasingly common thing to see on Stack Overflow, perhaps something newly added to a national curriculum in the current academic year.

I imagine the advantages are vaguely given thus:

  • You only need write one #include line
  • You do not need to look up which standard header everything is in

Unfortunately, this is a lazy hack, naming a GCC internal header directly instead of individual standard headers like <string>, <iostream> and <vector>. It ruins portability and fosters terrible habits.

The disadvantages include:

  • It will probably only work on that compiler
  • You have no idea what it'll do when you use it, because its contents are not set by a standard
  • Even just upgrading your compiler to its own next version may break your program
  • Every single standard header must be parsed and compiled along with your source code, which is slow and results in a bulky executable under certain compilation settings

Don't do it!


More information:

Example of why Quora is bad: