Właśnie widziałem to wewnątrz <boost/asio.hpp>
Jaki jest powód, dla którego #pragma raz wewnątrz strażników nagłówka?
#ifndef BOOST_ASIO_HPP
#define BOOST_ASIO_HPP
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
/// ....
#endif // BOOST_ASIO_HPP
Pomijając _MSC_VER
kontrole preprocesora, jakie są korzyści z posiadania #pragma once
w tym przypadku? Czy osłona nagłówka preprocesora nie gwarantuje, że we wszystkich przypadkach i na wszystkich platformach zawartość nagłówka jest tylko raz: included
?
Mówisz, że nagłówek jest otwarty i czytany tylko raz, jeśli mamy #pragma? Nagłówki oznaczają, że plik jest zawsze otwierany, ale zawartość w obrębie wartowników jest pomijana, prawda? Czy moje zrozumienie jest poprawne? Gdybym tylko mógł to zademonstrować, więc to widzę :) – dubnde
W przypadku #pragma raz nie zawsze jest otwarty. Dyrektywa ta powoduje, że kompilator pamięta, aby nie otwierać go ponownie (więcej niż raz). Dlatego ta dyrektywa jest lepsza od #ifndef, którą można pominąć. Jednak wiele osób nadal używa #ifndef do obsługi starych kompilatorów, które nie rozpoznają #pragma raz. –