Pull to refresh

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]).

А в какой позиции должен стоять атрибут, чтобы он применился к единице трансляции — так и не понял

P.S. По всей видимости, ни один из стандартных атрибутов нельзя применять к единице трансляции. Но для кастомных аттрибутов стандарт оставляет лазейку:

attribute-declaration:
   attribute-specifier-seq ;

Except where otherwise specified, the meaning of an attribute-declaration is implementation-defined.

Видимо, упоминание о том, что атрибуты могут быть применены к единицам трансляции, писалось именно с этим attribute-declaration на уме, что реализация может определить, что он значит «применить атрибут к единице трансляции» и будет при своём праве.

Sign up to leave a comment.

Articles