Oggi ho provato clang su un progetto che ho sviluppato qualche tempo fa. Sono rimasto sorpreso quando ha riscontrato un errore di compilazione, dal momento che avevo compilato il mio progetto usando con successo g ++.Parentesi squilibrata usando __attribute__ in g ++
Questo breve frammento riproduce la linea dove è stato rilevato l'errore:
int main() {
__attribute__((aligned(16)) char arr[5];
}
che produce questo errore:
test.cpp:2:32: error: expected ')'
__attribute__((aligned(16)) char arr[5];
^
)
Come si può vedere, c'è una parentesi umbalanced. Ci sono tre '(' 'e due') '. Questo sembra chiaramente che dovrebbe effettivamente produrre un errore di compilazione.
È un utilizzo valido di questa parola chiave? Non riesco a trovare nulla su the documentation che indica che lo è.
Sto usando g ++ 4.5.2 e clang 2.8.
Si noti che questo errore viene rilevato quando si utilizza gcc anziché g ++.
La [documentazione gcc] (http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html) afferma * "La parola chiave __attributo__' consente di specificare attributi speciali di variabili o campi struttura. * * Questa parola chiave è seguita da una specifica di attributo all'interno di doppie parentesi "***. Quindi non lo dice in parole esplicite precise sulla chiusura con lo stesso numero di parentesi, ma tutti gli esempi di gcc mostrano parentesi corrispondente, quindi sembra un bug. –
Sì, sembra che sia effettivamente un bug. Non riesco a trovare nulla che possa indicare il contrario. – mfontanini
@ DavidRodríguez-dribeas clang lo supporta. Voglio dire, sembra davvero che g ++ non stia analizzando correttamente l'espressione. Clang sta facendo la cosa giusta (almeno io sospetto di sì ... ecco perché sto chiedendo: D) quando si segnala un errore qui. – mfontanini