Несбалансированная скобка с использованием атрибута в 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
и каким-то чудом он все еще работает.