¿Por qué no puedo usar sizeof en una condición de preprocesador?

2 minutos de lectura

¿Por que no puedo usar sizeof en una condicion de
felix0322

Entiendo que sizeof es un operador, que se evalúa en tiempo de compilación a una constante entera. Pero parece que no se puede usar en la directiva de preprocesador #if como:

#if 4 == sizeof(int)
    typedef int Int32;
#endif

(cygwin-gcc 3.4.4 así como Visual C++ 6.0 informan errores de compilación)

¿Por qué no se permite ese uso?

Porque sizeof se evalúa en tiempo de compilación mientras se evalúan las directivas antes de compilación, y la parte que hace eso no es el compilador, por lo que no entenderá qué sizeof medio.

  • En realidad, el preprocesamiento ocurre durante la compilación, solo en una de las fases anteriores. evaluando sizeof ocurre en una fase posterior.

    – sbi

    23 de octubre de 2009 a las 11:14

  • @sbi El preprocesamiento no es parte de la compilación: el compilador generalmente ejecuta el preprocesador antes de la compilación real, pero puede indicarle al compilador que no lo haga. La respuesta de RichN es 100% correcta.

    – qrdl

    23 de octubre de 2009 a las 12:43

  • Bueno, me equivoqué, pero solo en la terminología: es una de las fases de traducción. Según este stackoverflow.com/questions/1476892/1479972#1479972, tampoco hay una fase llamada “compilación”, por lo que lo que significa eso parece abierto a la interpretación.

    – sbi

    23 de octubre de 2009 a las 21:34

  • Podría haber jurado que lo he visto funcionar antes. Aunque tal vez me equivoque.

    – Flan2006

    6 sep 2020 a las 14:21

El sizeof es un operador de C. No puede usar código C en directivas de preprocesador. Las directivas del preprocesador se evalúan antes de que tenga lugar la compilación.

  • “==” también es un operador. La respuesta de RichN me aclara un poco el problema.

    – felix0322

    23 de octubre de 2009 a las 10:52

  • @felix0322: El preprocesador tiene su propio == operador, que es el que se utiliza en las directivas de preprocesador.

    – sbi

    23 de octubre de 2009 a las 11:15

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad