Il titolo dice tutto. È stato standardizzato #pragma once
per C++ 0x? Non conosco alcun compilatore che non ne preveda un'implementazione, con quasi sempre la stessa semantica e nome.Ha fatto #pragma una volta? Lo rende in C++ 0x?
risposta
Tutte le direttive #pragma
fanno sì che l'implementazione si comporti in un modo definito dall'implementazione.
Questo non è cambiato tra C++ 03 e l'ultima bozza C++ 0x (n3225.pdf). Includere le guardie sono l'alternativa portatile.
So che le guardie sono l'alternativa portatile, ma ho pensato che avrebbe potuto essere comunque standardizzata. – Klaim
Si noti che l'ultima bozza è n3225.pdf. –
@Prasoon: Così è. A mia difesa, la "bozza attuale" sulla pagina Web WG21 non è aggiornata. http://www.open-std.org/jtc1/sc22/wg21/ –
Il compilatore Sun C++ (Solaris) non lo implementa. E no, non è in bozze di C++ 0x.
+1 per le informazioni. – Klaim
È anche banale implementare utilizzando #ifdef. Qual è il principio guida per la nuova versione? Implementa tutto ciò che potresti desiderare e il lavandino della cucina o semplicemente fornirti gli strumenti minimi per farlo da solo?
Ti manca il punto. Gran parte della standardizzazione consiste nel rendere la pratica comune il minimo disponibile per gli strumenti conformi agli standard. Come '#pragma once' è fornito da molti compilatori e si è dimostrato utile. Una parola chiave equivalente standardizzata sarebbe stata utile. – Klaim
include le guardie che ti obbligano a scegliere i nomi nello spazio dei nomi del preprocessore (unico e globale). che è un dolore concesso, molti progetti hanno bisogno di macro da qualche parte, quindi hanno affrontato il problema della scelta degli identificatori del preprocessore senza causare collisioni comunque. tuttavia è un dolore, e vedo ancora un sacco di codice #ifdef FILENAME_H che vola in giro. che è ARGH. i progetti più sensati usano PROJECTNAME_FILENAME_SOMESUFFIX, che è OK, ma bene ... IMO #pragma una volta è la soluzione migliore. –
- 1. "#pragma una volta" può causare errori?
- 2. C# ha un equivalente al pacchetto #pragma in C++?
- 3. #pragma una volta aggiunge guardie di inclusione?
- 4. Disabilitare un pulsante una volta fatto clic in Angular2
- 5. Quale è efficace usare #pragma una volta o #ifndef #endif?
- 6. Funzione "id" in C++ 0x
- 7. Quanti passaggi ha fatto il preprocessore C?
- 8. Devo ancora usare #include guards AND #pragma una volta?
- 9. Ereditare costruttori in C++ 0x
- 10. Clojure Architecture come lo zio Bob ha fatto
- 11. Che cosa consente lo standard #pragma?
- 12. Convenzioni di denominazione dei delegati iOS: dovrebbe, lo ha fatto,
- 13. C++ 0x regex in GCC
- 14. Commento Pragma C++
- 15. C++ 0x - L'espressione lambda ha lo stesso aspetto della classe interna anonima di Java?
- 16. C++ #pragma pack
- 17. Utilizzando Pragma-s di SQLite in C#
- 18. Threading C++ 0x
- 19. Transizione a C++ 0x da C++ 98
- 20. _1 parte di C++ 0x?
- 21. Esiste un modo semplice per implementare AutoResetEvent in C++ 0x?
- 22. Nuovi caratteri unicode in C++ 0x
- 23. come cache un lambda in C++ 0x?
- 24. A cosa serve l'avviso #pragma in C#?
- 25. disable #pragma message ("...") in Visual C++?
- 26. Discussioni in C, C++, C++ 0x, pthread e aumentare
- 27. location.hash ha effetto solo una volta in chrome e safari
- 28. Sopprimere -Wunknown-pragma di avviso in GCC
- 29. aggiungere supporto C++ 0x in cmake
- 30. problema con std :: make_tuple in C++ 0x
Vedere questo per un [getcha in '#pragma once'] (http://stackoverflow.com/questions/787533/is-pragma-once-a-safe-include-guard/1946730#1946730) – Motti
" Quasi "? Stai bene usandolo in diversi compilatori che non lo trattano in modo identico? Oppure, quali altri nomi conosci? (Non è chiaro a chi si applica il "quasi", o entrambi?) –