tengo varias copias de, digamos, stddef.h
en mi sistema, se está en el camino /usr/include/linux/stddef.h
, y tiene el siguiente aspecto:¿Por qué diferentes encabezados tienen el mismo nombre?
#ifndef _LINUX_STDDEF_H
#define _LINUX_STDDEF_H
#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
Otro está en el camino /usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5/include/
, y que es el que está usado cuando digo #include <stddef.h>
. los contenidos de ese uno es muy diferente de la primera, contiene las definiciones de ptrdiff_t
, size_t
etc.
Mi pregunta es: Por lo que yo sé, los/C estándares de C++ requieren que la definición de size_t
debe ser colocado en stddef.h
, sin embargo, el primero no sigue eso. Esa claramente no es la mencionada por los estándares de C/C++. Si ese archivo está allí para algún otro propósito, ¿por qué ambos archivos se nombran como stddef.h
, no sería más seguro/más claro si tuvieran nombres diferentes?
Parece bastante sospechoso, y la palabra de guardia calificada parece implicar que no se hace pasar por stddef.h intencionalmente. ¿Puedes verificar de qué paquete proviene? – Cheezmeister
@Cheezmeister: 'apt-file' produce: ' linux-libc-dev:/usr/include/linux/stddef.h' y 'gcc-4.5:/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5/include/stddef.h' – loudandclear
@Cheezmeister. Te secundaré. Ni la ruta '/ usr/include/linux/stddef.h' implica que es ** el encabezado estándar **. No hay 'stddef.h' bajo'/usr/include' en mi copia de Linux (Slackware64 13). – shinkou