Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> #pragma strartup, Зачем? 
:(
    Опции темы
gamedeveloper
Дата 21.11.2007, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 8.7.2007

Репутация: нет
Всего: нет



Просматривал хелп по Си Билдеру и наткнулся на эту прагму. Возник вопрос зачем использовать её? Чем принципиально отличается:

Код

void InitGraphFunc() {

}

#pragma startup InitGraphFunc 100

int main() {
  return 0;
}


от

Код

int main() {
  InitGraphFunc();
  return 0;
}

PM MAIL   Вверх
Alek86
Дата 21.11.2007, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



вроде, функция тогда вызовется перед функцией main


--------------------
user posted image    user posted image
PM MAIL   Вверх
gamedeveloper
Дата 21.11.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 8.7.2007

Репутация: нет
Всего: нет



Это я знаю.
А как это использовать можно?
PM MAIL   Вверх
archimed7592
Дата 21.11.2007, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(gamedeveloper @  21.11.2007,  21:27 Найти цитируемый пост)
А как это использовать можно? 

Думаю, лучше не использовать вовсе smile.
До main, вроде как даже инициализация статических объектов не гарантируется smile. До main вообще жизни нету smile.


--------------------
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
PM Jabber   Вверх
Alek86
Дата 21.11.2007, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



тут был бред smile

Это сообщение отредактировал(а) Alek86 - 21.11.2007, 21:54


--------------------
user posted image    user posted image
PM MAIL   Вверх
Mayk
Дата 22.11.2007, 04:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(gamedeveloper @  22.11.2007,  01:27 Найти цитируемый пост)
Это я знаю.
А как это использовать можно? 

Если второй параметр задаёт приоритет инициализации, то таким образом можно задать что какая либо foo() будет вызвано до bar(), которая ожидает что foo() уже завершено. А вот если мы сделаем [code]struct FooCaller{ 
  FooCaller(){ 
    foo() ; 
  }
}fooCaller;[/b] в foo.cpp и аналогичный BarCaller в bar.cpp то совершенно не ясно какой из двух ctr'ов будет вызван раньше.

Правда я не уверен в том что второй параметр суть приоритет.



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
xvr
Дата 22.11.2007, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(gamedeveloper @ 21.11.2007,  20:58)
Просматривал хелп по Си Билдеру и наткнулся на эту прагму. Возник вопрос зачем использовать её? 

А зачем в C++ используют статические объекты, их же можно все в main засунуть  smile 
Или пишешь ты библиотеку из 100 файлов и говоришь пользователю (в документации), что для нормальной работы этой библиотеки он должен вызвать в main вот эти 100 функций <здесь подставить список>  smile Или ты их сам вызываешь в файлах, где они описаны этой самой прагмой. Чуствуешь разницу?  smile 
PM MAIL   Вверх
archimed7592
Дата 22.11.2007, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(xvr @  22.11.2007,  15:03 Найти цитируемый пост)
А зачем в C++ используют статические объекты, их же можно все в main засунуть  smile 

Мда уж... Зачем на С++ писать, можно же и на асемблере писать.

Статические объекты тем и хороши, что "сами по себе" сконструируются.


--------------------
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
PM Jabber   Вверх
bsa
Дата 22.11.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(xvr @ 22.11.2007,  15:03)
Или пишешь ты библиотеку из 100 файлов и говоришь пользователю (в документации), что для нормальной работы этой библиотеки он должен вызвать в main вот эти 100 функций <здесь подставить список>  smile Или ты их сам вызываешь в файлах, где они описаны этой самой прагмой. Чуствуешь разницу?  smile

Такому писателю надо что-нибудь оторвать. Во всех вменяемых либах для этого создают одну функцию инициализации, которая уже в состоянии сама вызвать те 100, чтобы не тратить время использующего эту либу разработчика.
PM   Вверх
xvr
Дата 22.11.2007, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(bsa @ 22.11.2007,  18:12)
Цитата(xvr @ 22.11.2007,  15:03)
Или пишешь ты библиотеку из 100 файлов и говоришь пользователю (в документации), что для нормальной работы этой библиотеки он должен вызвать в main вот эти 100 функций <здесь подставить список>  smile Или ты их сам вызываешь в файлах, где они описаны этой самой прагмой. Чуствуешь разницу?  smile

Такому писателю надо что-нибудь оторвать. Во всех вменяемых либах для этого создают одну функцию инициализации, которая уже в состоянии сама вызвать те 100, чтобы не тратить время использующего эту либу разработчика.

'Вменяемые' либы пишут в виде большого набора небольших независимых модулей, что бы при подключении из нее линковалось только то, что необходимо, а не вся либа в виде одного большого кирпича smile Если все функции инициализации собрать в одну, то и получится тот самый кирпич :(
Так что все таки пишут 100 функций инициализации и обвертывают их в статические классы (если используется С++) или используют разные атрибуты и прагмы, типа startup.
За 100 функций инициализации, отданных пользователю, действительно надо отрывать все, что можно smile

PM MAIL   Вверх
archimed7592
Дата 22.11.2007, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(xvr @  22.11.2007,  18:54 Найти цитируемый пост)
обвертывают их в статические классы

Угу, может ещё поведуешь нам, что это за статические классы такие? smile


--------------------
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
PM Jabber   Вверх
xvr
Дата 22.11.2007, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(archimed7592 @ 22.11.2007,  18:56)
Цитата(xvr @  22.11.2007,  18:54 Найти цитируемый пост)
обвертывают их в статические классы

Угу, может ещё поведуешь нам, что это за статические классы такие? smile

Статические экземпляры специально созданных классов в конструкторе которых вызываются те самые функции инициализации.

PM MAIL   Вверх
archimed7592
Дата 22.11.2007, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(xvr @  22.11.2007,  19:06 Найти цитируемый пост)
Статические экземпляры специально созданных классов в конструкторе которых вызываются те самые функции инициализации.

Это называется статическими объектами и, IIRC, кто-то высказывал следующее:
Цитата(xvr @  22.11.2007,  15:03 Найти цитируемый пост)
А зачем в C++ используют статические объекты, их же можно все в main засунуть  smile 

А тут вдруг оказывается, что во вменяемых либах их в main не засовывают(в которых его по сути и нет). Вот ты и ответил на свой же вопрос smile.


--------------------
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
PM Jabber   Вверх
gamedeveloper
Дата 22.11.2007, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 8.7.2007

Репутация: нет
Всего: нет



Хорошо, спасибо всем (киваю головой и делаю вид что всё понял).
Но ещё вопрос: почему этой прагмы нет в Вижуал Студии? Или там вместо неё startup-заменитель?

Это сообщение отредактировал(а) gamedeveloper - 22.11.2007, 20:17
PM MAIL   Вверх
archimed7592
Дата 22.11.2007, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(gamedeveloper @  22.11.2007,  20:14 Найти цитируемый пост)
почему этой прагмы нет в Вижуал Студии?

Потому что набор прагм у всех компиляторов разный.

По сути, не совсем понятно, зачем эта прагма вообще нужна. Скорее всего она используется в исходниках самого компилятора... В общем тебе она не нужна, вот и забей на неё smile.


--------------------
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
PM Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0738 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.