问题
I know most compilers allow both:
#include <stdio.h>
//and
#include <cstdio>
But someone argued that <stdio.h> is not actually C++ standard.
is that true?
回答1:
stdio.h
is standard, but deprecated. Always prefer cstdio
in C++.
[n3290: C.3.1/1]:
For compatibility with the Standard C library, the C++ standard library provides the 18 C headers (D.5), but their use is deprecated in C++.
[n3290: D.5/3]:
[ Example: The header<cstdlib>
assuredly provides its declarations and definitions within the namespacestd
. It may also provide these names within the global namespace. The header<stdlib.h>
assuredly provides the same declarations and definitions within the global namespace, much as in the C Standard. It may also provide these names within the namespacestd
. —end example ]
回答2:
It's not true, because C++ main goal is backward compatibility with C. The only difference is that for
#include <cstdio>
all functions are in std
namespace
回答3:
The C standard headers are included in the C++ standard library for compatibility.
The difference is that identifiers in corresponding C++ headers must (also) be in std namespace, whereas identifiers in C headers must (also) be available in global namespace.
In addition, the <c...>
headers add overloads for functions like abs
, pow
etc.
Also, C++ headers replace some C classification/comparison macros with overloaded functions.
回答4:
The C++ standard library explicitly contains the C standard library, so is an entirely legitimate part of C++. And if you are talking about using #include <stdio.h>
in C++ code, then you shouldn't do that, cause that's C syntax, in C++ code, you should use always cstdio
来源:https://stackoverflow.com/questions/7596406/stdio-h-not-standard-in-c