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;
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 dealigned
sea una constante entera, mientras que C no lo requiere. Para solucionar esto, puedes reemplazarALIGN_BYTES
con la constante 64 en el caso de C++.