![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| gamedeveloper |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 8.7.2007 Репутация: нет Всего: нет |
Просматривал хелп по Си Билдеру и наткнулся на эту прагму. Возник вопрос зачем использовать её? Чем принципиально отличается:
от
|
||||
|
|||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
вроде, функция тогда вызовется перед функцией main
|
|||
|
||||
| gamedeveloper |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 8.7.2007 Репутация: нет Всего: нет |
Это я знаю.
А как это использовать можно? |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Думаю, лучше не использовать вовсе До main, вроде как даже инициализация статических объектов не гарантируется -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
тут был бред
Это сообщение отредактировал(а) Alek86 - 21.11.2007, 21:54 |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Если второй параметр задаёт приоритет инициализации, то таким образом можно задать что какая либо foo() будет вызвано до bar(), которая ожидает что foo() уже завершено. А вот если мы сделаем [code]struct FooCaller{ FooCaller(){ foo() ; } }fooCaller;[/b] в foo.cpp и аналогичный BarCaller в bar.cpp то совершенно не ясно какой из двух ctr'ов будет вызван раньше. Правда я не уверен в том что второй параметр суть приоритет. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
А зачем в C++ используют статические объекты, их же можно все в main засунуть Или пишешь ты библиотеку из 100 файлов и говоришь пользователю (в документации), что для нормальной работы этой библиотеки он должен вызвать в main вот эти 100 функций <здесь подставить список> |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Мда уж... Зачем на С++ писать, можно же и на асемблере писать. Статические объекты тем и хороши, что "сами по себе" сконструируются. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Такому писателю надо что-нибудь оторвать. Во всех вменяемых либах для этого создают одну функцию инициализации, которая уже в состоянии сама вызвать те 100, чтобы не тратить время использующего эту либу разработчика. |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
'Вменяемые' либы пишут в виде большого набора небольших независимых модулей, что бы при подключении из нее линковалось только то, что необходимо, а не вся либа в виде одного большого кирпича Так что все таки пишут 100 функций инициализации и обвертывают их в статические классы (если используется С++) или используют разные атрибуты и прагмы, типа startup. За 100 функций инициализации, отданных пользователю, действительно надо отрывать все, что можно |
||||
|
|||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Угу, может ещё поведуешь нам, что это за статические классы такие? -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
||||
|
||||
| archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Это называется статическими объектами и, IIRC, кто-то высказывал следующее:
А тут вдруг оказывается, что во вменяемых либах их в main не засовывают(в которых его по сути и нет). Вот ты и ответил на свой же вопрос -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
| gamedeveloper |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 8.7.2007 Репутация: нет Всего: нет |
Хорошо, спасибо всем (киваю головой и делаю вид что всё понял).
Но ещё вопрос: почему этой прагмы нет в Вижуал Студии? Или там вместо неё startup-заменитель? Это сообщение отредактировал(а) gamedeveloper - 22.11.2007, 20:17 |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Потому что набор прагм у всех компиляторов разный. По сути, не совсем понятно, зачем эта прагма вообще нужна. Скорее всего она используется в исходниках самого компилятора... В общем тебе она не нужна, вот и забей на неё -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |