Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Язык С, ARM - простые вопросы
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Страницы: 1, 2
A. Fig Lee
Цитата(singlskv @ Jan 26 2009, 17:52) *
ага, неправильно, и выделить нужно было другой текст:
3 An object whose identifier is declared with external or internal linkage, or with the
storage-class specifier static has static storage duration. Its lifetime is the entire
execution of the program and its stored value is initialized only once, prior to program
startup.

Обращу Ваше внимание что в этом пункте вобще ничего не сказанно про место где декларируется static identifier ...


енивей, глобальные переменные - стстические обьявленные в глобальном скопе.

возражения есть?

кстати, я все никак не добьюсь - речь о C или C++ ?
раные языки, разное определение статик
A. Fig Lee
вот правильный стандард - C++:

The zeroinitialization
(8.5) of all local objects with static storage duration (3.7.1) is performed before any
other initialization takes place. A local object of POD type (3.9) with static storage duration initialized with
constantexpressions
is initialized before its block is first entered. An implementation is permitted to perform
early initialization of other local objects with static storage duration under the same conditions that an
implementation is permitted to statically initialize an object with static storage duration in namespace scope
(3.6.2). Otherwise such an object is initialized the first time control passes through its declaration; such an
object is considered initialized upon the completion of its initialization. If the initialization exits by throwing
an exception, the initialization is not complete, so it will be tried again the next time control enters the
declaration.


если мы о C++ ( так как статик внутри функции).
если о C, то там в принципе статик по барабану для длительности жизни.


вопчем, я победил. maniac.gif
zltigo
Цитата(A. Fig Lee @ Jan 27 2009, 17:42) *
вопчем, я победил. maniac.gif

Вы, как выяснилось, не можете ни думать, ни понимать написанное. Бывает sad.gif.
A. Fig Lee
Цитата(zltigo @ Jan 27 2009, 11:10) *
Вы, как выяснилось, не можете ни думать, ни понимать написанное. Бывает sad.gif.


Товарищ Супермодератор - если у Вас нет возражений по существу, прошу держать себя в рамках.
Или аргументы в студию
singlskv
Цитата
кстати, я все никак не добьюсь - речь о C или C++ ?
раные языки, разное определение статик
Ну вроде как и о том и о другом, и речь здесь велась в основном о "static storage duration",
как о глобальных переменных а никак об области их видимости...

Но если хотите продолжить:
Цитата
вот правильный стандард - C++:
(8.5) of all local objects with static storage duration (3.7.1) is performed before any
other initialization takes place.
Но на этом конечно не будем зацикливаться...
Посмотрим тут:
Цитата
A local object of POD type (3.9) with static storage duration initialized with
constantexpressions is initialized before its block is first entered. An implementation is permitted to perform
early initialization of other local objects with static storage duration under the same conditions that an
implementation is permitted to statically initialize an object with static storage duration in namespace scope
(3.6.2). Otherwise such an object is initialized the first time control passes through its declaration; such an
object is considered initialized upon the completion of its initialization. If the initialization exits by throwing
an exception
, the initialization is not complete, so it will be tried again the next time control enters the
declaration.
Вот очень простой вопрос к Вам, если "exits by throwing an exception" произошел, то lifetime уже началась или еще нет ?
A. Fig Lee
Цитата(singlskv @ Jan 27 2009, 17:27) *
Ну вроде как и о том и о другом, и речь здесь велась в основном о "static storage duration",
как о глобальных переменных а никак об области их видимости...

Но если хотите продолжить:
Но на этом конечно не будем зацикливаться...
Посмотрим тут:
Вот очень простой вопрос к Вам, если "exits by throwing an exception" произошел, то lifetime уже началась или еще нет ?


нет, не началась. начнется после успешной инициализации..

собственно, для Си кийворд статик можно опустить - глобал там ето обьявленные прям в теле программы,
а статик влияет на визибилити онли
Dima_G
Цитата(singlskv @ Jan 27 2009, 01:29) *
Я это и имел в виду.("менять ее можно будет...")


Вас обманули... smile.gif

Ну то есть, конечно, можно представить себе компилятор который будет так поступать,
только это очень не эффективно.

Ну и главное что память под такую переменную уже будет отведена компилятором, те к моменту первого
запуска ее адрес будет постоянным.


Локальная статическая переменная будет проинициализирована при первом входе входе в область ее видимости.
Память под статическую переменную выделяется на этапе линковки - соответственно живет она все время жизни программы.
A. Fig Lee
Цитата(Dima_G @ Jan 28 2009, 05:21) *
Локальная статическая переменная будет проинициализирована при первом входе входе в область ее видимости.
Память под статическую переменную выделяется на этапе линковки - соответственно живет она все время жизни программы.


да, согласен.

3.7.1 Static storage duration [basic.stc.static]
1 All objects which neither have dynamic storage duration nor are local have static storage duration. The
storage for these objects shall last for the duration of the program (3.6.2, 3.6.3).
2 If an object of static storage duration has initialization or a destructor with side effects, it shall not be eliminated
even if it appears to be unused, except that a class object or its copy may be eliminated as specified in
12.8.
3 The keyword static can be used to declare a local variable with static storage duration. [Note: 6.7
describes the initialization of local static variables; 3.6.3 describes the destruction of local static
variables. ]
4 The keyword static applied to a class data member in a class definition gives the data member static
storage duration.
rezident
Модератор. Тема закрыта по просьбе топикстартера.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.