Del estándar C ++ 11 (el énfasis es mío):
D.5 Encabezados de biblioteca estándar de C [encabezados depr.c.]
- Para compatibilidad con la biblioteca estándar C ...
- Cada encabezado C, cada uno de los cuales tiene un nombre del formulario name.h , se comporta como si cada nombre colocado en el espacio de nombres de la biblioteca estándar por el encabezado cname correspondiente estuviera ubicado dentro del ámbito del espacio de nombres global . No se especifica si estos nombres se declaran o definen primero dentro del alcance del espacio de nombres (3.3.6) del espacio de nombres std y luego se inyectan en el alcance del espacio de nombres global mediante declaraciones de uso explícitas (7.3.3).
- Ejemplo: el encabezado
<cstdlib>
seguramente proporciona sus declaraciones y definiciones dentro del espacio de nombres
std
. También puede proporcionar estos nombres dentro del espacio de nombres global. El encabezado <stdlib.h>
seguramente proporciona las mismas declaraciones y definiciones dentro del espacio de nombres global , como en el estándar C. También puede proporcionar estos nombres dentro del espacio de nombres std
.
El uso de los encabezados «name.h» está en desuso, se han identificado como candidatos para ser eliminados de futuras revisiones.
Entonces, sugeriría incluir los encabezados «cname» y usar las declaraciones y definiciones del std
espacio de nombres.
Si tiene que usar los encabezados «name.h» por alguna razón (está desaprobado, vea arriba), sugeriría usar las declaraciones y definiciones del espacio de nombres global.
En otras palabras: prefiero
#include <cstdio>
int main() {
std::printf("Hello world\n");
}
encima
#include <stdio.h>
int main() {
printf("Hello world\n");
}
C
símbolos de la biblioteca en el espacio de nombres global sea ilegal, prefiero usar lasstd::
versiones calificadas. (Además, desearía que lo hubieran hecho ilegal).