¿Dónde se define ptrdiff_t en C?

2 minutos de lectura

avatar de usuario
carpintero mate

Dónde está ptrdiff_t definido en C?

se define en stddef.h.


Ese encabezado define los tipos integrales. size_t, ptrdiff_ty wchar_tla macro funcional offsetofy 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 de NULL (pero incluido me da ptrdiff_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 y offsetof 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 si stddef.h está incluido, definirá internamente ptrdiff_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 que echo '#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


¿Ha sido útil esta solución?