El título lo dice todo. ¿Se ha estandarizado #pragma once
para C++ 0x? No conozco ningún compilador que no proporcione una implementación del mismo, con casi siempre la misma semántica y nombre.¿Pasó `#pragma una vez` a C++ 0x?
Respuesta
Todas las directivas #pragma
hacen que la implementación se comporte de una manera definida por la implementación.
Esto no ha cambiado entre C++ 03 y el último borrador de C++ 0x (n3225.pdf). Incluir guardias es la alternativa portátil.
Sé que los protectores son la alternativa portátil, pero pensé que podría haber sido estandarizada de todos modos. – Klaim
Tenga en cuenta que el último borrador es n3225.pdf. –
@Prasoon: Así es. En mi defensa, el "borrador actual" en la página web del WG21 no está actualizado. http://www.open-std.org/jtc1/sc22/wg21/ –
El compilador Sun C++ (Solaris) no lo implementa. Y no, no está en los borradores C++ 0x.
+1 para la información. – Klaim
También es trivial de implementar con #ifdef. ¿Cuál es el principio rector de la nueva versión? ¿Implementa todo lo que puedas desear y el fregadero de la cocina o simplemente te da las herramientas mínimas para hacerlo tú mismo?
Te estás perdiendo el punto. Una gran parte de la sandardización es hacer que la práctica común sea el mínimo disponible para las herramientas que cumplen con los estándares. Como '#pragma once' ES proporcionado por muchos compiladores y se ha demostrado que es útil. Una palabra clave equivalente estandarizada hubiera sido útil. – Klaim
incluye guardias que le obligan a elegir nombres en el espacio de nombres del preprocesador (uno y único global). que es un dolor Concedido, la mayoría de los proyectos necesitan macros en alguna parte, por lo que tienen que lidiar con el problema de elegir identificadores de preprocesador sin causar colisiones de todos modos. sin embargo, es un dolor, y todavía veo una gran cantidad de código #ifdef FILENAME_H volando alrededor. que es ARGH la mayoría de los proyectos razonables usan PROJECTNAME_FILENAME_SOMESUFFIX, que es OKish, pero bueno .... IMO #pragma una vez es la mejor solución. –
- 1. ¿"#pragma una vez" tiene el potencial de causar errores?
- 2. #pragma vez Versus # si define MYHEADER_INCLUDED_
- 3. ¿Cuál es eficiente usar #pragma una vez o #ifndef #endif?
- 4. Transición a C++ 0x desde C++ 98
- 5. C++ # paquete de pragma
- 6. ¿Has empezado a usar C++ 0x?
- 7. ¿están agregando copy_if a C++ 0x?
- 8. C++ 0x sobrecarga Lambda
- 9. C++ 0x lambda capturas
- 10. Implementando una buena C++ 0x error_condition?
- 11. C++ 0x: Memoria ordenar
- 12. "Backporting" nullptr a C++ - programas pre-C++ 0x
- 13. Uso de #pragma en C
- 14. ¿Qué significa #pragma en C?
- 15. C + + 0x subprocesamiento
- 16. C++ 0x - ¿Cuándo?
- 17. Tipo subyacente de una enumeración de C++ en C++ 0x
- 18. Plantilla automática hecha a mano (sin usar C++ 0x)
- 19. Especializando una plantilla en una lambda en C++ 0x
- 20. Usando __thread en C++ 0x
- 21. función "id" en C++ 0x
- 22. C++ 0x interrupción de hilo
- 23. C++ 0x con Qt Creator
- 24. Usando pragma intrínseco (sqrt, pow) en C#?
- 25. C++ 0x: Capture By Value for Lambda, siempre una copia?
- 26. Usando unordered_map de C++ 0x
- 27. Soporte Unicode en C++ 0x
- 28. función asíncrona llamada C++ 0x
- 29. CMake clang y C++ 0x
- 30. ¿Por qué no se incluyen guardias o pragma una vez que estén funcionando?
Consulte esto para obtener [en '#pragma una vez'] (http://stackoverflow.com/questions/787533/is-pragma-once-a-safe-include-guard/1946730#1946730) – Motti
"Casi "¿?" ¿Estás bien usándolo en diferentes compiladores que no lo tratan de forma idéntica? O, ¿con qué otros nombres lo conoces? (No está claro a cuál se aplica "casi", o ambos?) –