Do C ++ 11 Standard (ênfase minha):
Cabeçalhos de biblioteca padrão D.5 C [depr.c.headers]
- Para compatibilidade com a biblioteca padrão C ...
- Cada cabeçalho C, cada um com um nome no formato name.h , se comporta como se cada nome colocado no namespace da biblioteca padrão pelo cabeçalho cname correspondente fosse colocado no escopo do namespace global . Não é especificado se esses nomes são primeiro declarados ou definidos no escopo do namespace (3.3.6) do namespace std e, em seguida, são injetados no escopo do namespace global por declarações de uso explícitas (7.3.3).
- Exemplo: O cabeçalho
<cstdlib>
certamente fornece suas declarações e definições dentro do namespace
std
. Ele também pode fornecer esses nomes no namespace global. O cabeçalho <stdlib.h>
certamente fornece as mesmas declarações e definições dentro do namespace global , assim como no C Standard. Ele também pode fornecer esses nomes no namespace std
.
Usar os cabeçalhos «name.h» está obsoleto, eles foram identificados como candidatos para remoção de revisões futuras.
Então, eu sugeriria incluir os cabeçalhos «cname» e usar as declarações e definições do std
namespace.
Se você tiver que usar os cabeçalhos «name.h» por alguns motivos (está obsoleto, veja acima), eu sugeriria usar as declarações e definições do namespace global.
Em outras palavras: prefira
#include <cstdio>
int main() {
std::printf("Hello world\n");
}
sobre
#include <stdio.h>
int main() {
printf("Hello world\n");
}
C
símbolos de biblioteca no namespace global seja ilegal, eu prefiro usar asstd::
versões qualificadas. (Além disso, eu meio que gostaria que eles tivessem tornado isso ilegal).