¿Cuál es la forma correcta de habilitar advertencias de alias estrictas en g ++? ¿VC++ 10 implementa esas reglas?Habilitación de advertencias de alias estrictas en g ++
Respuesta
Utilice -fstrict-aliasing
para g++
. También uso -Wstrict-aliasing=2
para ver advertencias relacionadas con posibles violaciones de reglas de aliasing estrictas.
Se habilitan automáticamente por -O2
porque deben usarse para realizar algunas de las optimizaciones. Definitivamente, combínelo con la advertencia (-Wall
hace el truco) para asegurarse de que no está creando un código potencialmente defectuoso. De lo contrario, puede usar -fstrict-aliasing
como se ve en otra respuesta para habilitarlos.
No estoy seguro acerca de VC++ 10 sin embargo.
VC++ 10 habilita la regla de alias estricto con/O1 y superior. Utilizo el programa de prueba (con valor de conteo 6) en el capítulo "BENEFICIOS PARA LA ESTRICTA REGLA DE ALIADO" de here. Y obtenga el siguiente código asm. Puedes ver que la carga de b se realiza solo una vez.
00A910AE movzx edx,word ptr [edx+2] //Load of b
00A910B2 xor eax,eax
00A910B4 xor ecx,ecx
00A910B6 add dword ptr [esp+eax*4+34h],edx //Loop start
00A910BA add eax,1
00A910BD adc ecx,edi
00A910BF jne main+76h (0A910C6h)
00A910C1 cmp eax,6
00A910C4 jb main+66h (0A910B6h) //Loop end
Pero parece que no hay una forma de habilitar la advertencia para infringir esta regla.
- 1. Colocación nueva contra gcc 4.4.3 reglas de alias estrictas
- 2. ¿C89 o C++ 03 definen reglas de alias estrictas?
- 3. ¿Cómo obtengo las advertencias de prototipo de g ++ faltantes?
- 4. C99 reglas estrictas de aliasing en C++ (GCC)
- 5. Habilitación de autocompletar en sbcl
- 6. g ++ C++ 0x clase enum Advertencias del compilador
- 7. Hacer plantillas django estrictas
- 8. Haskell: operaciones booleanas no estrictas
- 9. Habilitación del registro en Spring
- 10. nginx Habilitación de codificación de transferencia fragmentada
- 11. Bibliotecas para estructuras de datos estrictas en Haskell
- 12. ¿Hay alguna manera en que pueda hacer que g ++ solo emita advertencias relacionadas con mis archivos?
- 13. Habilitación de SSL en una instancia de Apache en EC2
- 14. gcc Advertencias de Woverloaded-virtual
- 15. Habilitación de ScrollViewer HorizontalSnapPoints con colección enlainable
- 16. char * de conversión y las reglas de alias
- 17. Habilitación de la función de auditoría en SQLServer 2005
- 18. Habilitación de restricciones de clave externa en SQLite
- 19. g: incluir vs g: render
- 20. g ++ Error de análisis en ":"
- 21. Vinculación de archivos en g ++
- 22. ¿Cómo puedo suprimir las advertencias de obsolescencia de g ++ en la compilación OCaml cuando se enlazan con bibliotecas C++?
- 23. C++: ¿Qué parámetros de GNU G ++?
- 24. zsh alias expansion
- 25. ¿Crear alias en emacs?
- 26. Cómo suprimir advertencias en Qt Creator
- 27. PHP 5 deshabilita el error de normas estrictas
- 28. alias de anidación en C#
- 29. Alias de clase en scala
- 30. reutilización de alias en SELECT
Las reglas están siempre "habilitadas". Solo la advertencia que le dice cuándo los está rompiendo es opcional. –