Qual è il modo corretto per abilitare gli avvisi di alias rigidi in g ++? VC++ 10 implementa tali regole?Abilitazione di avvisi di alias rigidi in g ++
risposta
Utilizzare -fstrict-aliasing
per g++
. Io uso anche -Wstrict-aliasing=2
per vedere gli avvertimenti relativi a possibili violazioni delle rigide regole di aliasing.
Sono attivati automaticamente da -O2
perché è necessario utilizzarli per eseguire alcune ottimizzazioni. Assolutamente combinalo con l'avviso (-Wall
fa il trucco) per assicurarti di non creare codice potenzialmente buggato. Altrimenti puoi usare -fstrict-aliasing
come visto in un'altra risposta per abilitarli.
Non sono sicuro di VC++ 10.
VC++ 10 attiva la regola di aliasing rigorosa con/O1 e sopra. Uso il programma di test (con valore di conteggio 6) nel capitolo "VANTAGGI PER LA REGOLARE REGOLA DI ALIENTAMENTO" di here. E ottenere il seguente codice asm. Puoi vedere il carico di b solo una volta.
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
ma sembra che non ci sia un modo per abilitare l'avviso per rompere questa regola.
- 1. Abilitazione degli avvisi di migrazione
- 2. Abilitazione parametri di registro git di default
- 3. Abilitazione di OpenSSL in WAMP
- 4. Abilitazione di net.tcp in IIS7
- 5. Abilitazione di OpenSSL in XAMPP
- 6. PHP 7 e rigidi tipi di "risorsa"
- 7. Motori fisici 2D non rigidi in C++
- 8. Abilitazione barra di scorrimento in WPF
- 9. Differenza di rendering del browser tra DOCTYPE rigidi/di transizione
- 10. Rischio sicurezza di abilitazione MSDTC
- 11. Avvisi/avvisi di nullpointer in studio Android nella vista codice
- 12. abilitazione el in jsp
- 13. Tipo di f g x = g. gx
- 14. Abilitazione VSync in Vulkan
- 15. funzione di Alias in javascript
- 16. Alias di classe in scala
- 17. Alias di assieme in XAML
- 18. Gli avvisi di toastr sembrano avvisi di bootstrap
- 19. gcc: Abilitazione dei simboli di debug nella libreria condivisa
- 20. Elenco di avvisi IntelliJ
- 21. Abilitazione di Tiger Geocoder in versione postgis 2.1
- 22. Monitoraggio di collegamenti rigidi o simbolici con mercurial su Windows
- 23. conversione di avvisi in errori in MATLAB
- 24. Perché \ G in SELECT * FROM nome_tabella \ G?
- 25. Alias di specializzazione modello
- 26. Gli array Haskell sono troppo rigidi?
- 27. Android M non consente collegamenti rigidi?
- 28. Abilitazione di Eslint su file dattiloscritti
- 29. Configurazione build iPhone Funzioni di abilitazione
- 30. Laravel: abilitazione barra degli strumenti di debug
Le regole sono sempre "abilitate". Solo l'avvertimento che ti dice quando li stai violando è facoltativo. –