#pragma once
От: remark Россия http://www.1024cores.net/
Дата: 15.09.07 12:46
Оценка: 1 (1)
Может баян, но тем не менее. С радостью для себя обнаружил, что и msvc, и g++, и icc последних версий все поддерживают #pragma once. Поэтому если код не предполагается компилировать другими компиляторами, то можно с радостью забыть о include guard'ах. С чем всех и поздравляю.
Проверял на g++ 4.3.0 и icc 10.0.025. По поводу IBM и SUN, к сожалению, не знаю.

Ещё бы договорились по поводу прекомпилированных заголовков, и совсем стало бы хорошо. Сейчас только g++ отстаёт. За счёт чего и компилирует С++ код ужасно долго...


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: #pragma once
От: IROV..  
Дата: 15.09.07 13:05
Оценка: -3
Здравствуйте, remark, Вы писали:

R>Ещё бы договорились по поводу прекомпилированных заголовков, и совсем стало бы хорошо. Сейчас только g++ отстаёт. За счёт чего и компилирует С++ код ужасно долго...


PCH — в топку!

R>

я не волшебник, я только учусь!
Re: #pragma once
От: _nn_ www.nemerleweb.com
Дата: 15.09.07 13:27
Оценка:
Здравствуйте, remark, Вы писали:

R>Может баян, но тем не менее. С радостью для себя обнаружил, что и msvc, и g++, и icc последних версий все поддерживают #pragma once. Поэтому если код не предполагается компилировать другими компиляторами, то можно с радостью забыть о include guard'ах. С чем всех и поздравляю.

R>Проверял на g++ 4.3.0 и icc 10.0.025. По поводу IBM и SUN, к сожалению, не знаю.

R>Ещё бы договорились по поводу прекомпилированных заголовков, и совсем стало бы хорошо. Сейчас только g++ отстаёт. За счёт чего и компилирует С++ код ужасно долго...


R>


Вот подумалось переносимый #pragma once
// VC >4.0
// GCC >=4.30
// ICC >10
#if (defined(_MSC_VER) && _MSC_VER > 1000) || \
    (defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 30) || (__GNUC__ > 4))) || \
    (defined(__ICC) && __ICC > 1000)
#   define ONCE once    
#else
#   define ONCE message("")
#endif


Использовать:
#pragma ONCE
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: #pragma once
От: remark Россия http://www.1024cores.net/
Дата: 15.09.07 14:00
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Вот подумалось переносимый #pragma once


Я тоже о таком думал. Но проблема в том, что вместе с ним всё равно придётся писать include guard. Т.ч. смысл немного теряется.


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[3]: #pragma once
От: _nn_ www.nemerleweb.com
Дата: 15.09.07 14:08
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, _nn_, Вы писали:


__>>Вот подумалось переносимый #pragma once


R>Я тоже о таком думал. Но проблема в том, что вместе с ним всё равно придётся писать include guard. Т.ч. смысл немного теряется.


R>


Не совсем.
Применение pragma once мне позволило в 2 раза сократить время компиляции проекта.

Так что нужно и то и другое использовать. Одно для переносимости, второе для скорости
Неплохо бы в буст добавить это: #pragma BOOST_ONCE
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: #pragma once
От: _nn_ www.nemerleweb.com
Дата: 15.09.07 15:06
Оценка:
Здравствуйте, remark, Вы писали:

R>Может баян, но тем не менее. С радостью для себя обнаружил, что и msvc, и g++, и icc последних версий все поддерживают #pragma once. Поэтому если код не предполагается компилировать другими компиляторами, то можно с радостью забыть о include guard'ах. С чем всех и поздравляю.

R>Проверял на g++ 4.3.0 и icc 10.0.025. По поводу IBM и SUN, к сожалению, не знаю.

R>Ещё бы договорились по поводу прекомпилированных заголовков, и совсем стало бы хорошо. Сейчас только g++ отстаёт. За счёт чего и компилирует С++ код ужасно долго...


R>


здесь пишется, что #pragma once поддерживается GCC с незопамятных времен.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: #pragma once
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 15.09.07 19:53
Оценка:
Здравствуйте, remark, Вы писали:

R>Может баян, но тем не менее. С радостью для себя обнаружил, что и msvc, и g++, и icc последних версий все поддерживают #pragma once. Поэтому если код не предполагается компилировать другими компиляторами, то можно с радостью забыть о include guard'ах. С чем всех и поздравляю.

R>Проверял на g++ 4.3.0 и icc 10.0.025. По поводу IBM и SUN, к сожалению, не знаю.

А я и то и другое юзаю. Гуарды обязательно, а once, если вспоминаю о нем и меня вдруг потянет начать оптимизировать ...
#if(COMP_CONF_SUPPORT_PRAGMA_ONCE)
# pragma once
#endif

R>
Ага
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: #pragma once
От: LuciferMoscow Россия  
Дата: 15.09.07 19:53
Оценка:
Здравствуйте, remark, Вы писали:

R>Ещё бы договорились по поводу прекомпилированных заголовков, и совсем стало бы хорошо. Сейчас только g++ отстаёт. За счёт чего и компилирует С++ код ужасно долго...

Incredibuild не любит перкомпайл хедеры
... << RSDN@Home 1.1.4 beta 4 rev. 358>>
Re[2]: #pragma once
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 15.09.07 19:56
Оценка:
Здравствуйте, IROV.., Вы писали:

R>>Ещё бы договорились по поводу прекомпилированных заголовков, и совсем стало бы хорошо. Сейчас только g++ отстаёт. За счёт чего и компилирует С++ код ужасно долго...


IRO>PCH — в топку!


С чего бы это вдруг?
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: #pragma once
От: jazzer Россия Skype: enerjazzer
Дата: 15.09.07 20:04
Оценка: +1
Здравствуйте, remark, Вы писали:

R>Ещё бы договорились по поводу прекомпилированных заголовков, и совсем стало бы хорошо. Сейчас только g++ отстаёт. За счёт чего и компилирует С++ код ужасно долго...


почему отстает? В нем с версии 3.3 они есть
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: #pragma once
От: remark Россия http://www.1024cores.net/
Дата: 15.09.07 20:21
Оценка:
Здравствуйте, _nn_, Вы писали:

__>здесь пишется, что #pragma once поддерживается GCC с незопамятных времен.


А чо ж тогда люди вообще ещё помнят про include guard'ы? Неужели так много людей пишут под всякую экзотику...
Я периодически сталкиваюсь, что люди пишут под msvc+g++ и используют гуарды. Да даже только под msvc и всё равно...


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: #pragma once
От: remark Россия http://www.1024cores.net/
Дата: 15.09.07 20:24
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>А я и то и другое юзаю. Гуарды обязательно, а once, если вспоминаю о нем и меня вдруг потянет начать оптимизировать ...

КД>
КД>#if(COMP_CONF_SUPPORT_PRAGMA_ONCE)
КД># pragma once
КД>#endif
КД>


Да я вот тоже подумал как же мне оформлять хидеры в новой библиотеке.
Думаю надо как-то так по-хорошему:

#ifdef LIB_USE_PRAGMA_ONCE
#pragma once
#endif
#ifndef HEADER_NAME_H
#define HEADER_NAME_H
...
#endif


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

Тем более когда можно просто:

#pragma once
...



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: #pragma once
От: remark Россия http://www.1024cores.net/
Дата: 15.09.07 20:25
Оценка: :)
Здравствуйте, LuciferMoscow, Вы писали:

LM>Здравствуйте, remark, Вы писали:


R>>Ещё бы договорились по поводу прекомпилированных заголовков, и совсем стало бы хорошо. Сейчас только g++ отстаёт. За счёт чего и компилирует С++ код ужасно долго...

LM>Incredibuild не любит перкомпайл хедеры

Что за зверь такой?


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: #pragma once
От: remark Россия http://www.1024cores.net/
Дата: 15.09.07 20:26
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, remark, Вы писали:


R>>Ещё бы договорились по поводу прекомпилированных заголовков, и совсем стало бы хорошо. Сейчас только g++ отстаёт. За счёт чего и компилирует С++ код ужасно долго...


J>почему отстает? В нем с версии 3.3 они есть


А примерчик можно? Как чо в каком файле писать и какие опции компилятора?
Я вот в документации несколько раз специально смотрел — в упор не видел ничего подобного. И pragma once тоже.


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[3]: #pragma once
От: LuciferMoscow Россия  
Дата: 15.09.07 20:36
Оценка:
Здравствуйте, remark, Вы писали:

R>>>Ещё бы договорились по поводу прекомпилированных заголовков, и совсем стало бы хорошо. Сейчас только g++ отстаёт. За счёт чего и компилирует С++ код ужасно долго...

LM>>Incredibuild не любит перкомпайл хедеры
R>Что за зверь такой?
R>
А гугл зачем?

Фигня, которая распределяет билд на много компов. Теперь я уже не знаю как без него работать
... << RSDN@Home 1.1.4 beta 4 rev. 358>>
Re[3]: #pragma once
От: LuciferMoscow Россия  
Дата: 15.09.07 20:36
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

IRO>>PCH — в топку!

КД>С чего бы это вдруг?
Например, тута
Автор: LuciferMoscow
Дата: 15.09.07
... << RSDN@Home 1.1.4 beta 4 rev. 358>>
Re[3]: #pragma once
От: _nn_ www.nemerleweb.com
Дата: 15.09.07 21:23
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, _nn_, Вы писали:


__>>здесь пишется, что #pragma once поддерживается GCC с незопамятных времен.


R>А чо ж тогда люди вообще ещё помнят про include guard'ы? Неужели так много людей пишут под всякую экзотику...

Ну как я понял хотели закрыть лавочку с pragma once.
R>Я периодически сталкиваюсь, что люди пишут под msvc+g++ и используют гуарды. Да даже только под msvc и всё равно...
Есть причины: наследие Борладна и без этого нельзя проверять был ли файл подключен или нет.

R>
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: #pragma once
От: _DAle_ Беларусь  
Дата: 15.09.07 22:49
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>Здравствуйте, remark, Вы писали:


R>>Ещё бы договорились по поводу прекомпилированных заголовков, и совсем стало бы хорошо. Сейчас только g++ отстаёт. За счёт чего и компилирует С++ код ужасно долго...

LM>Incredibuild не любит перкомпайл хедеры

Что значит не любит? Если пользоваться с умом, то все хорошо.

Q: I'm using precompiled headers in my project. Does IncrediBuild support this? Is there anything I should be aware of regarding precompiled headers?
A: Yes, IncrediBuild supports projects using Precompiled Headers and will accelerate projects using PCHs. Specifically, "Automatic" PCHs have been known to slow down builds when used with IncrediBuild, and our recommendation if you are using automatic PCHs is to either switch to using a standard header-based PCH or disable PCHs altogether.


Precompiled headers
All files using a precompiled header will not start compiling before that precompiled header has been built. Note that if MSVC's default option of using a precompiled header was kept in your project, but stdafx.h is practically empty, it is recommended to remove stdafx.cpp from the project and set the project settings to "Not using precompiled headers".

... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[3]: #pragma once
От: _DAle_ Беларусь  
Дата: 15.09.07 22:49
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, LuciferMoscow, Вы писали:


LM>>Здравствуйте, remark, Вы писали:


R>>>Ещё бы договорились по поводу прекомпилированных заголовков, и совсем стало бы хорошо. Сейчас только g++ отстаёт. За счёт чего и компилирует С++ код ужасно долго...

LM>>Incredibuild не любит перкомпайл хедеры

R>Что за зверь такой?


Аналог distcc. Вообще, если ты программируешь на с++ под win, то странно, что о нем не слышал.

R>
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[3]: #pragma once
От: _DAle_ Беларусь  
Дата: 15.09.07 23:40
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, jazzer, Вы писали:


J>>Здравствуйте, remark, Вы писали:


R>>>Ещё бы договорились по поводу прекомпилированных заголовков, и совсем стало бы хорошо. Сейчас только g++ отстаёт. За счёт чего и компилирует С++ код ужасно долго...


J>>почему отстает? В нем с версии 3.3 они есть


R>А примерчик можно? Как чо в каком файле писать и какие опции компилятора?

R>Я вот в документации несколько раз специально смотрел — в упор не видел ничего подобного. И pragma once тоже.

R>


Вот. Только вроде бы с версии 3.4 они там появились.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.