Объявление Статической Переменной (C)
Эквивалентны ли следующие два объявления переменных static
?
1.
static int var1;
static int var2;
static int var3;
2.
static int var1, var2, var3;
Более конкретно, в случае 2 все переменные будут static
, или только var1
?4 ответа:
Да декларации в случае
1
и2
идентичны. Мы можем увидеть это, перейдя в раздел Проект стандарта C996.7.5
Деклараторы , которые говорят (Курсив мой вперед):Каждый Декларатор объявляет один идентификатор и утверждает, что когда операнд той же формы, что и Декларатор, появляется в выражении, он обозначает функцию или Объект с областью действия, длительностью хранения, и тип, указанный в декларации спецификаторы .
Мы можем видеть грамматику из раздела
6.7
декларации таковы:declaration: declaration-specifiers init-declarator-listopt ;
Спецификаторы объявления включают длительность хранения:
declaration-specifiers: storage-class-specifier declaration-specifiersopt
Таким образом, спецификатор длительности хранения применяется ко всем деклараторам в init-declarator-list, который имеет следующую грамматику:
init-declarator-list: init-declarator init-declarator-list , init-declarator init-declarator: declarator declarator = initializer
Вы можете задаться вопросом о указателях, они обрабатываются по-разному, и мы можем видеть это из грамматики в
6.7.5
для деклараторов:declarator: pointeropt direct-declarator [...] pointer: * type-qualifier-listopt * type-qualifier-listopt pointer
Они эквивалентны.
В случае 2 все переменные будут статическими.
Спецификатор класса хранения
static
применяется ко всем объявленным переменным в объявлении.
Вы только что показали, как переменные могут быть объявлены по-разному.
static int var1, var2, var3;
Или
static int var1; static int var2; static int var3;
Имеет то же значение
Ie; переменная одного и того же типа данных(а также одного и того же класса хранения) может быть объявлена отдельно или все вместе один раз