their includes headers guards functions files define cpp compile and c++ header

includes - headers c++>



espacio de nombres cstdio stdio.h (2)

Veo esta línea desde la referencia de c ++ para cstdio :

Cada elemento de la biblioteca se define dentro del std namespace . pero probé el código:

std::printf("hello world"); printf("hello world");

¿Es cierto que los encabezados de C ++ ponen los nombres tanto en el espacio de nombres estándar como en el estándar ?


De acuerdo con libstdc ++ documentos:

El estándar especifica que si uno incluye el encabezado de estilo C ( <math.h> en este caso), los símbolos estarán disponibles en el espacio de nombres global y quizás en el espacio de nombres std :: (pero esto ya no es un requisito firme). Por otro lado, incluido el encabezado de estilo C ++ ( <cmath> ) garantiza que las entidades se encontrarán en el espacio de nombres std y quizás en el espacio de nombres global.

http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch03s02.html


Incluir cstdio importa los nombres de los símbolos en el std nombres std y posiblemente en el espacio de nombres Global.
La inclusión de stdio.h importa los nombres de los símbolos en el espacio de nombres Global y posiblemente en el std nombres std .

Lo mismo aplica para todos los encabezados estilo c.

Referencia:
Estándar C ++ 11

Anexo D (normativo) Características de compatibilidad [depr] :

D.6 C cabeceras de biblioteca estándar

1 Para la compatibilidad con la biblioteca estándar C y el C Unicode TR, la biblioteca estándar C ++ proporciona los encabezados 25 C, como se muestra en la Tabla 151.

Que incluye:

<assert.h> <float.h> <math.h> <stddef.h> <tgmath.h> <complex.h> <inttypes.h> <setjmp.h> <stdio.h> <time.h> <ctype.h> <iso646.h> <signal.h> <stdint.h> <uchar.h> <errno.h> <limits.h> <stdarg.h> <stdlib.h> <wchar.h> <fenv.h> <locale.h> <stdbool.h> <string.h> <wctype.h>

Más allá,

2 Cada encabezado C, cada uno de los cuales tiene un nombre del nombre del formulario.h, se comporta como si cada nombre colocado en el espacio de nombres de la biblioteca estándar por el cname header correspondiente se ubica dentro del alcance del espacio de nombres global. No se especifica si estos nombres se declaran o definen por primera vez dentro del ámbito de espacio de nombres (3.3.6) del espacio de nombres estándar y luego se inyectan en el ámbito del espacio de nombres global mediante declaraciones de uso explícitas (7.3.3).

3 [Ejemplo: el encabezado <cstdlib> seguridad 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> seguridad proporciona las mismas declaraciones y definiciones dentro del espacio de nombres global, de forma muy similar al estándar C. También puede proporcionar estos nombres dentro del espacio de nombres std. -Final ejemplo]