Hoy probé clang en un proyecto que he desarrollado hace algún tiempo. Me sorprendió cuando se encontró con un error de compilación, ya que había compilado mi proyecto con éxito usando g ++.Paréntesis desequilibrado con __attribute__ en g ++
Este breve fragmento reproduce la línea donde se encuentra el error:
int main() {
__attribute__((aligned(16)) char arr[5];
}
que produce este error:
test.cpp:2:32: error: expected ')'
__attribute__((aligned(16)) char arr[5];
^
)
Como se puede ver, no es un paréntesis umbalanced. Hay tres '(', y dos ')'. Esto claramente parece que en realidad debería producir un error de compilación.
¿Es este un uso válido de esta palabra clave? Parece que no puedo encontrar nada en the documentation que indique que sí.
Estoy usando g ++ 4.5.2 y clang 2.8.
Tenga en cuenta que este error se detecta al usar gcc en lugar de g ++.
La [documentación de gcc] (http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html) establece * "La palabra clave' __attribute__' le permite especificar atributos especiales de variables o campos de estructura. * * Esta palabra clave es seguida por una especificación de atributo dentro de doble paréntesis "***. Por lo tanto, no lo dice en palabras explícitas precisas sobre el cierre con el mismo número de paréntesis, pero todos los ejemplos de gcc muestran paréntesis coincidentes, por lo que parece un error. –
Sí, parece que en realidad es un error. No puedo encontrar nada que pueda indicar lo contrario. – mfontanini
@ DavidRodríguez-dribeas clang lo admite. Quiero decir, realmente parece que g ++ no está analizando esa expresión correctamente. clang está haciendo lo correcto (al menos sospecho que sí ... por eso estoy preguntando: D) al informar un error aquí. – mfontanini