appena visto questo all'interno <boost/asio.hpp>
Qual è la ragione per #pragma una volta all'interno delle protezioni?
#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
La mancata osservanza delle _MSC_VER
controlli preprocessore, qual è il vantaggio di avere il #pragma once
in questo caso? La protezione dell'intestazione del preprocessore non garantisce in tutti i casi e su tutte le piattaforme, i contenuti dell'intestazione sono sempre solo included
una volta?
Stai dicendo che l'intestazione è aperta e leggi solo una volta se abbiamo #pragma? Le guardie di intestazione significa che il file è sempre aperto ma i contenuti all'interno delle guardie vengono saltati, giusto? La mia comprensione è corretta? Se solo potessi dimostrarlo così vedo che succede :) – dubnde
In caso di #pragma una volta non è sempre aperto. Questa direttiva fa ricordare al compilatore di non riaprirla (più di una volta). Ecco perché questa direttiva è superiore a #ifndef, che potrebbe essere omessa. Tuttavia molte persone usano ancora #ifndef per supportare vecchi compilatori che non riconoscono #pragma una volta. –