Название говорит само за себя. #pragma once
были стандартизированы для C ++ 0x? Я не знаю компилятора, который бы не реализовал его, почти всегда с той же семантикой и именем.
Попала ли `#pragma once` в C ++ 0x?
Ответы (3)
Все директивы #pragma
заставляют реализацию вести себя так, как это определено реализацией.
Это не изменилось между C ++ 03 и последним черновиком C ++ 0x (n3225.pdf). Включая охранники - портативная альтернатива.
person
CB Bailey
schedule
30.12.2010
Я знаю, что охранники - портативная альтернатива, но я подумал, что в любом случае их можно было бы стандартизировать.
- person Klaim; 30.12.2010
Обратите внимание, что последний черновик - n3225.pdf.
- person Prasoon Saurav; 30.12.2010
@Prasoon: Так оно и есть. В свою защиту, текущий проект на веб-странице WG21 устарел. open-std.org/jtc1/sc22/wg21
- person CB Bailey; 30.12.2010
Хорошо,
#pragma once
может вызвать проблемы, но мне интересно - почему бы не рассмотреть другие альтернативы, например #pragma once ID
, с указанным пользователем идентификатором? Или мне только противны эти скопированные строки ifdef-define-endif? ..
- person Roman L; 30.12.2010
Если какой-то тип #pragma однажды станет стандартом, это не заставит вас использовать его во всех файлах, поэтому я не вижу проблемы с добавлением его в стандарт (кроме присвоения ему имени, отличного от прагмы).
- person Klaim; 31.12.2010
@Klaim: В основном потому, что это совершенно не нужно добавлять в язык. Это уже можно сделать с помощью функций, уже имеющихся в языке.
- person Mooing Duck; 09.04.2015
Компилятор Sun C ++ (Solaris) не поддерживает его. И нет, это не в черновиках C ++ 0x.
person
zeuxcg
schedule
30.12.2010
Это также тривиально реализовать с помощью #ifdef. Каков руководящий принцип для новой версии? Реализовать все, что вам может понадобиться, включая кухонную раковину, или просто дать вам минимум инструментов, чтобы сделать это самостоятельно?
person
Jay
schedule
30.12.2010
Вы упускаете суть. Большая часть сандардизации состоит в том, чтобы сделать обычную практику минимально доступным для стандартных инструментов. Поскольку
#pragma once
IS предоставляется многими компиляторами и зарекомендовал себя как полезный. Было бы полезно использовать стандартизованный эквивалент ключевого слова.
- person Klaim; 30.12.2010
include guards заставляет вас выбирать имена в (единственном и единственном глобальном) пространстве имен препроцессора. это боль. Конечно, большинству проектов нужны макросы где-то, поэтому они решают проблему выбора идентификаторов препроцессора, в любом случае не вызывая коллизий. тем не менее, это неприятно, и я все еще вижу много летающего кода #ifdef FILENAME_H. что есть ARGH. большинство разумных проектов используют PROJECTNAME_FILENAME_SOMESUFFIX, что нормально, но хорошо .... IMO #pragma once - лучшее решение.
- person Paul Groke; 24.05.2012
#pragma once
- person Motti   schedule 30.12.2010