Несбалансированная скобка с использованием атрибута в g++

сегодня я попробовал clang на проекте, который я разработал некоторое время назад. Я был удивлен, когда он столкнулся с ошибкой компиляции, так как я успешно скомпилировал свой проект с помощью g++.

этот короткий фрагмент воспроизводит строку, в которой произошла ошибка:

int main() {
    __attribute__((aligned(16)) char arr[5];
}

что приводит к этой ошибке:

test.cpp:2:32: error: expected ')'
    __attribute__((aligned(16)) char arr[5];
                               ^
                               )

Как вы можете видеть, есть umbalanced скобки. Есть три " ("и два")". Это явно выглядит так, как будто на самом деле должно произвести ошибка компиляции.

это допустимое использование этого сайта? Кажется, я ничего не могу найти на документация это означает, что это так.

Я использую g++ 4.5.2 и clang 2.8.

обратите внимание, что эта ошибка обнаружена при использовании gcc вместо g++.

1 ответов


это будет ошибка компилятора. Компилятор видит __attribute__ затем две открывающие скобки, некоторые другие токены, а затем две закрывающие скобки, что, вероятно, является" определением " того, что __attribute__ должен выглядеть, например,

::= __attribute__ '((' что-то '))'

Я предполагаю, что токены между ними интерпретируются как aligned(16 и каким-то чудом он все еще работает.