Tradizionalmente, il modo standard e portatile per evitare inclusioni multiple di intestazione in C ++ era / è quello di utilizzare lo #ifndef - #define - #endif
schema di direttive pre-compilatore chiamato anche schema di macro-guardia (vedi frammento di codice sotto).
#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
...
#endif
Nella maggior parte delle implementazioni / compilatori (vedi immagine sotto), tuttavia, esiste un'alternativa più "elegante" che ha lo stesso scopo dello schema di macro-guardia chiamato #pragma once
. #pragma once
presenta diversi vantaggi rispetto allo schema di macro-guardia, incluso meno codice, elusione degli scontri con i nomi e talvolta miglioramento della velocità di compilazione.
Facendo delle ricerche, mi sono reso conto che sebbene la #pragma once
direttiva sia supportata da quasi tutti i compilatori conosciuti, c'è una torbidità sul fatto che la #pragma once
direttiva faccia parte o meno dello standard C ++ 11.
Domande:
- Qualcuno potrebbe chiarire se la
#pragma once
direttiva fa parte o meno dello standard C ++ 11? - Se non fa parte dello standard C ++ 11, ci sono piani per includerlo nelle versioni successive (ad esempio, C ++ 14 o versioni successive)?
- Sarebbe anche bello se qualcuno potesse approfondire ulteriormente i vantaggi / gli svantaggi nell'uso di una delle due tecniche (es. Macro-guardia contro
#pragma once
).
#pragma once
solito no.