carpintero mate
Dónde está ptrdiff_t
definido en C?
se define en stddef.h
.
Ese encabezado define los tipos integrales. size_t
, ptrdiff_t
y wchar_t
la macro funcional offsetof
y la macro constante NULL
.
-
Extrañamente, está ubicado en
linux/stddef.h
(pero incluye bien con#include <stddef.h>
. Sólo contiene la definición deNULL
(pero incluido me daptrdiff_t
). Aquí hay algunos trucos de encabezado que me impidieron hacer grepping en primer lugar. ¿Puedes iluminar?– Matt Carpintero
30 de agosto de 2010 a las 4:02
-
Y, de esos, sólo
ptrdiff_t
yoffsetof
no están definidos en ningún otro lugar; los otros tres también están definidos por otros encabezados.–Jonathan Leffler
30 de agosto de 2010 a las 4:04
-
@Matt: No hay una definición de
ptrdiff_t
¿en absoluto? Estrictamente hablando, un compilador no tiene que implementar nada en el encabezado. Podría funcionar simplemente notando que sistddef.h
está incluido, definirá internamenteptrdiff_t
y así. Eso podría ser, sin embargo, no tengo su versión del encabezado disponible para buscar.– GManNickG
30 de agosto de 2010 a las 4:06
-
El Real
stddef.h
se esconde debajo/usr/lib/gcc/TARGET/VERSION/include
junto con una serie de otros encabezados que pertenecen a GCC (y pueden ser específicos de la versión de GCC) en lugar de las bibliotecas C.linux/stddef.h
solo se usa para el código del kernel (y honestamente no veo por qué se molestan en tener su propia copia). Usted puede encontrar el-H
cambie a gcc útil para investigar este tipo de pregunta.– zwol
30 de agosto de 2010 a las 4:08
-
@GoodPerson Ese no es un sistema operativo basado en GNU-libc que tienes allí. Muchas otras bibliotecas de C proporcionan sus propias
stddef.h
, pero glibc se lo deja al compilador. En cualquier caso, si tienes GCC, observa lo queecho '#include <stddef.h>' | gcc -E -H -xc - > /dev/null
huellas dactilares.– zwol
06/03/2013 a las 23:15
Está definido por el estándar POSIX: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stddef.h.html Donde el tipo es exactamente puede ser específico de la implementación, pero la interfaz es stddef.h
-
ptrdiff_t
se define en<stddef.h>
totalmente de acuerdo con el estándar del lenguaje C. POSIX está completamente fuera de lugar en este caso.– AnT apoya a Rusia
27/09/2018 a las 20:46