es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

C vs C++ ¿por qué esta macro no se expande a una constante?

Estoy utilizando gcc/g++. El código de abajo se compila bien con gcc -S test.c, sin embargo, con g++ -S test.cpp obtengo un error: el alineamiento solicitado no es una constante entera. Si observo la salida del preprocesador para ambos casos, parece ser idéntica. Por lo tanto, mi pregunta es por qué la constante ALIGN_BYTES no está siendo evaluada a 64 por el preprocesador en el caso de C++. (Si reemplazo ALIGN_BYTES con la constante 64, funciona perfectamente).

/* test.c, test.cpp */
#define BITS 512
#define ALIGN_BYTES (BITS / 8)

#define ALIGN attribute ((aligned(ALIGN_BYTES)))

typedef char* ALIGN char_PT;

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El preprocesador evalúa ALIGN_BYTES a la constante 64 en el caso de C, pero no en el caso de C++. Esto se debe a que C++ requiere que el argumento de aligned sea una constante entera, mientras que C no lo requiere. Para solucionar esto, puedes reemplazar ALIGN_BYTES con la constante 64 en el caso de C++.

Comments are closed.