Название: #ifndef или #pragma once? Отправлено: yarick от Апрель 23, 2013, 10:00 Самый старый и проверенный способ защиты заголовков от повторного включения - через #ifndef. Однако он слишком большой, неудобный - да и при переименовании имя класса приходится константу переименовывать.
Есть более удобный и быстрый (как в плане написания, так и компиляции) способ - использовать #pragma once. Он поддерживается самыми основными компиляторами, хотя и не входит в стандарт. Я переделал свой проект из #ifndef в #pargma once. Однако заглянул в исходники Qt 4.8 - там почему-то используется первый способ... Должны быть какие-то причины на это! Название: Re: #ifndef или #pragma once? Отправлено: Странник от Апрель 23, 2013, 10:05 Однако заглянул в исходники Qt 4.8 - там почему-то используется первый способ... Должны быть какие-то причины на это! причина как раз таки в "нестандартности" этого метода, полагаю. поскольку Qt собирается на большом числе платформ с использованием различных компиляторов, использовать возможности, не прописанные в стандарте, недальновидно.Название: Re: #ifndef или #pragma once? Отправлено: mutineer от Апрель 23, 2013, 10:06 В вики со ссылкой на gcc.gnu.org пишут что прагма устаревшая и не стоит ее использовать
Цитировать `#pragma once' is now obsolete and should not be used at all Как по мне так ее проблема в том, что она не стандартная, соответственно не всеми компиляторами поддерживается. А менять привычку от компилятора к компилятору мне лично не хочется Название: Re: #ifndef или #pragma once? Отправлено: Bepec от Апрель 23, 2013, 10:32 Меня вымораживают такие вот махинации. Когда посылают тебе проект, а он раз - и не собирается :D Раз - и не работает. И говорят - а что, вы разве не используете %названиеКомпилятора%??? :)
Название: Re: #ifndef или #pragma once? Отправлено: yarick от Апрель 23, 2013, 10:35 Устаревшей эта конструкция давно уже не является, хотя, насколько я понял, когда-то её объявили устаревшей но потом отменили это
Название: Re: #ifndef или #pragma once? Отправлено: xokc от Апрель 23, 2013, 11:03 Встречал ещё и такое :)
Код
Мне лично удобнее #pragma once пользоваться. Но ведь нестандрат... Приходиться ifdefить. |