Comments 3
Но так как атрибуты могут использоваться в C++ коде практически везде и применяться практически ко всему: к типам, переменным, функциям, именам, блокам кода или целым единицам трансляции
Прочитал и задумался: а как это..? Погуглил стандарт и он правда говорит, что могут атрибуты применяться к единицам трансляции:
Attributes specify additional information for various source constructs such as types, variables, names, contract assertions, blocks, or translation units.
Но потом говорит:
Each attribute-specifier-seq is said to appertain to some entity or statement, identified by the syntactic context where it appears ([stmt], [dcl], [dcl.decl]).
А в какой позиции должен стоять атрибут, чтобы он применился к единице трансляции — так и не понял
Единица трансляции, это самый обычный верхнеуровневый decl, поэтому ничто не мешает прикрепить к нему атрибут.
Правда я тоже не знаю, как это можно сделать именно в коде :-)
P.S. По всей видимости, ни один из стандартных атрибутов нельзя применять к единице трансляции. Но для кастомных аттрибутов стандарт оставляет лазейку:
attribute-declaration:
attribute-specifier-seq ;
Except where otherwise specified, the meaning of an attribute-declaration is implementation-defined.
Видимо, упоминание о том, что атрибуты могут быть применены к единицам трансляции, писалось именно с этим attribute-declaration на уме, что реализация может определить, что он значит «применить атрибут к единице трансляции» и будет при своём праве.
Делаем собственный анализатор C++ кода в виде плагина для Clang