Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции

Ошибки компиляции

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•: Π­Ρ‚ΠΈ ошибки ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ выводят ΠΎΠΊΠ½ΠΎ ΠΈ просто ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ » Build Failed » Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ компилятора. Если появляСтся ΠΎΠΊΠ½ΠΎ, Ρ‚ΠΎ это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ошибка Runner Error, которая ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ здСсь.

ВсС сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… компилятора Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

Если ошибка Π½Π°ΠΉΠ΄Π΅Π½Π° Π² сцСнарии, Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ просто:

Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π²Π°ΠΆΠ΄Ρ‹ Ρ‰Π΅Π»ΠΊΠ½ΡƒΡ‚ΡŒ Π½Π° любой ΠΈΠ· записСй ΠΎΠ± ошибкС компилятора, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ Π°ΠΊΡ‚ΠΈΠ² Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠΉ ΠΊΠ°ΠΊ Π΄Π°ΡŽΡ‰Π°Ρ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽΡΡ Π² сообщСнии. ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽΡΡ Π² сообщСнии, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π³Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ ΠΈΠ»ΠΈ сцСнарии ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка. Однако ΠΈΠ½ΠΎΠ³Π΄Π° эти ошибки ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°Π³Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΌΠΈ, поэтому Π½ΠΈΠΆΠ΅ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список всСх ошибок ΠΈ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ объяснСниС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚:

Π Π°Π·Π½ΠΎΠ΅

Π‘Ρ‚Ρ€ΡƒΠ½Ρ‹

Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹, Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹

ИспользованиС Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ [var]Π’Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½Π° Π±Ρ‹Π»Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ [var] доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСнияВы ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ измСнСнаНСвозмоТно Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ [var]ИмСнованная пСрСмСнная Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Π° Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ компиляцииНСкоррСктная ссылка Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽΠ’Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ [var], Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния.Π’Ρ‹ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, которая доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСнияНСвозмоТно ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽΠ’Ρ‹ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎ ΠΆΠ΅ имя, Ρ‡Ρ‚ΠΎ ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· встроСнных пСрСмСнныхНСвозмоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя рСсурса для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉΠ’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ имя рСсурса ΠΈΠ· Π΄Π΅Ρ€Π΅Π²Π° рСсурсов Π² качСствС локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ[ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ] доступно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСнияВы ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, которая Π±Ρ‹Π»Π° ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π° ΠΊΠ°ΠΊ доступная Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‡Ρ‚Π΅Π½ΠΈΡΠ˜Π½Π΄Π΅ΠΊΡ массива Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠ’Ρ‹ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ индСкс ΠΌΠ°ΡΡΠΈΠ²Π°ΠŸΠ΅Ρ€Π΅Ρ€Ρ‹Π², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π±Π΅Π· контСкстаВы Π½Π΅ использовали Ρ€Π°Π·Ρ€Ρ‹Π² Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ, ΠΏΠ΅Ρ‚Π»ΠΈ ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠΉ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±Π΅Π· контСкстаВы Π½Π΅ использовали continue Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ контСкстСпродолТСниС заявлСния Π½Π΅ допускаСтся Π½Π° Π΄Π°Π½Π½ΠΎΠΌ этапСВы использовали continue Π² Ρ‚ΠΎΠΉ части вашСго ΠΊΠΎΠ΄Π°, Π³Π΄Π΅ это запрСщСнопСрСчислСниС num Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΠΎΠΌΠ΅Ρ€ пСрСчислСния нСдСйствитСлСн для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡΠ½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ пСрСчислСниСВы Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ создали пСрСчислСниСenum [пСрСчислСниС] ΡƒΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎΠ’Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ пСрСчислСниС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎ ΠΆΠ΅ имя, Ρ‡Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅, Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅.Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡƒΡŽ Π·Π°ΠΏΠΈΡΡŒΠ²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ пСрСчислСния Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ цСлочислСнной ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚ΠΎΠΉΠ—Π°ΠΏΠΈΡΡŒ пСрСчислСния Π½Π΅ оцСниваСтся ΠΊΠ°ΠΊ цСлочислСнная константаБсылка Π½Π° пСрСчислСниС [ΠΊΠ»ΡŽΡ‡] Π½Π΅ сущСствуСт Π² [пСрСчислСнии]Π’Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° запись пСрСчислСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π½Π΅Π΅ Π½Π΅ Π±Ρ‹Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ для этого пСрСчислСния

ΠžΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅ символы/значСния

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Ошибки ΠΈ прСдупрСТдСния компилятора ΠΈ срСдств сборки C/C++

Π’ ΡΡ‚Π°Ρ‚ΡŒΡΡ…, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ΡΡ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΈ прСдупрСТдСния диагностики, созданныС компилятором Microsoft C/C++ ΠΈ срСдствами сборки.

компиляторы Visual Studio ΠΈ срСдства сборки ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ… ошибок ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ. ПослС обнаруТСния ошибки ΠΈΠ»ΠΈ прСдупрСТдСния срСдства сборки ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ прСдполоТСния ΠΎ намСрСниях ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ большС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Если срСдства Π΄Π΅Π»Π°ΡŽΡ‚ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ошибки ΠΈΠ»ΠΈ прСдупрСТдСния Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ. ΠŸΡ€ΠΈ устранСнии ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ всСгда Π½Π°Ρ‡ΠΈΠ½Π°ΠΉΡ‚Π΅ с ΠΏΠ΅Ρ€Π²ΠΎΠΉ зарСгистрированной ошибки (ΠΈΠ»ΠΈ прСдупрСТдСния) ΠΈ выполняйтС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΡƒΡŽ сборку ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π°Ρ‰Π΅. Одно ΠΈΠ· исправлСний ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ошибок.

Бсылки Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы справки ΠΈ сообщСства см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Visual C++ справки ΠΈ Community.

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅

Ошибки ΠΈ прСдупрСТдСния BSCMAKE (BKxxxx)
Ошибки ΠΈ прСдупрСТдСния, создаваСмыС слуТСбной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ «ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ» (BSCMAKE.EXE).

Ошибки ΠΈ прСдупрСТдСния ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки
Ошибки ΠΈ прСдупрСТдСния, создаваСмыС срСдствами сборки для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡ компилятора с C4000 ΠΏΠΎ C5999
ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡ для ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… компилятором C++ (CL.EXE).

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡ компилятора ΠΏΠΎ вСрсиям компилятора
Бписок ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΏΠΎΡΠ²ΠΈΠ²ΡˆΠΈΡ…ΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ вСрсиСй компилятора.

Ошибки срСды выполнСния C (Rxxxx)
Ошибки, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Π²ΠΎ врСмя выполнСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния C (CRT).

Ошибки ΠΈ прСдупрСТдСния CVTRES (CVTxxxx)
Ошибки ΠΈ прСдупрСТдСния, созданныС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π°ΠΉΠ»Π° рСсурсов ΠœΠ°ΠΉΠΊΡ€ΠΎΡΠΎΡ„Ρ‚ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ прСобразования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² COFF (CVTRES.EXE).

Ошибки вычислитСля Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (CXXxxxx)
Ошибки, создаваСмыС ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠΌ ΠΈ срСдствами диагностики.

Ошибки ΠΈ прСдупрСТдСния срСдств ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° (LNKxxxx)
Ошибки ΠΈ прСдупрСТдСния, созданныС ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ ΠΈ связанными инструмСнтами (LINK.EXE, LIB.EXE, DUMPBIN.EXE, EDITBIN.EXE).

ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ошибки (Mxxxx)
Ошибки, создаваСмыС матСматичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ срСды выполнСния с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой.

Ошибки ΠΈ прСдупрСТдСния NMAKE (Uxxxx)
Ошибки ΠΈ прСдупрСТдСния, создаваСмыС инструмСнтом Microsoft Makefile (NMAKE.EXE).

Ошибки ΠΈ прСдупрСТдСния ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ (Пгкскскскс)
Ошибки ΠΈ прСдупрСТдСния, созданныС срСдствами ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Profile-Guided (PGO).

Ошибки ΠΈ прСдупрСТдСния Ρ€Π΅ΠΆΠΈΠΌΠ° сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (PRJxxxx)
ошибки ΠΈ прСдупрСТдСния, созданныС Π² машинном ΠΊΠΎΠ΄Π΅ C++ Project систСмы сборки Π² Visual Studio.

БообщСния Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°
ДиагностичСскиС сообщСния, создаваСмыС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ компилятора Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Optimization.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Находим ошибки Π² ΠΊΠΎΠ΄Π΅ компилятора GCC с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° PVS-Studio

GNU Compiler Collection (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сокращСниС GCC) β€” Π½Π°Π±ΠΎΡ€ компиляторов для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… языков программирования, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° GNU. GCC являСтся свободным ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ обСспСчСниСм, распространяСтся Ρ„ΠΎΠ½Π΄ΠΎΠΌ свободного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π½Π° условиях GNU GPL ΠΈ GNU LGPL ΠΈ являСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ GNU toolchain. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ написан Π½Π° языкС C ΠΈ C++.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ GCC ΠΈΠΌΠ΅Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ встроСнныС диагностики, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰ΠΈΠ΅ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ошибки Π½Π° этапС компиляции. ЕстСствСнно, GCC собираСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ GCC ΠΈ, соотвСтствСнно, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ ошибки Π² собствСнном ΠΊΠΎΠ΄Π΅. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ исходный ΠΊΠΎΠ΄ GCC провСряСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Coverity. Π”Π° ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅, Π΄ΡƒΠΌΠ°ΡŽ GCC провСрялся энтузиастами с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… инструмСнтов. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ поиск ошибок Π² GCC большим испытаниСм для Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π° PVS-Studio.

Для Π°Π½Π°Π»ΠΈΠ·Π° Π±Ρ‹Π»Π° взята trunk вСрсия ΠΈΠ· git-рСпозитория: (git) commit 00a7fcca6a4657b6cf203824beda1e89f751354b svn+ssh://gcc.gnu.org/svn/gcc/trunk@238976

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π‘Ρ‚Π°Ρ‚ΡŒΡ Π·Π°Π΄Π΅Ρ€ΠΆΠ°Π»Π°ΡΡŒ с Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ, ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ошибки ΡƒΠΆΠ΅ исправлСны. Но это Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния: постоянно ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ ошибки, старыС ΠΈΡΡ‡Π΅Π·Π°ΡŽΡ‚. Π“Π»Π°Π²Π½ΠΎΠ΅ β€” ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ статичСский Π°Π½Π°Π»ΠΈΠ· ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΠ³Π°Ρ‚ΡŒ программистам Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ ошибки послС ΠΈΡ… появлСния.

ΠŸΡ€Π΅Π΄Π²ΠΈΠ΄Ρ Π΄ΠΈΡΠΊΡƒΡΡΠΈΡŽ

Как я сказал Π²ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ, я ΡΡ‡ΠΈΡ‚Π°ΡŽ GCC ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ с высоким качСством ΠΊΠΎΠ΄Π°. Π£Π²Π΅Ρ€Π΅Π½, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ захотят ΠΏΠΎΡΠΏΠΎΡ€ΠΈΡ‚ΡŒ. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ Ρ†ΠΈΡ‚Π°Ρ‚Ρƒ ΠΈΠ· Wikipedia Π½Π° русском языкС:

НСкоторыС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ OpenBSD, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π’Π΅ΠΎ Π΄Π΅ Π Π°Π°Π΄Ρ‚ ΠΈ ΠžΡ‚Ρ‚ΠΎ ΠœΡƒΡ€Π±Π΅ΠΊ (Otto Moerbeek), ΠΊΡ€ΠΈΡ‚ΠΈΠΊΡƒΡŽΡ‚ GCC, называя Π΅Π³ΠΎ Β«Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ, Π³Π»ΡŽΡ‡Π½Ρ‹ΠΌ, ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΊΠΎΠ΄Β».

Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ Ρ‚Π°ΠΊΠΈΠ΅ заявлСния нСобоснованными. Π”Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠ΄ GCC содСрТит ΠΌΠ½ΠΎΠ³ΠΎ макросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΡΡŽΡ‚ Π΅Π³ΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅. Но я Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΌΠΎΠ³Ρƒ ΡΠΎΠ³Π»Π°ΡΠΈΡ‚ΡŒΡΡ с заявлСниСм ΠΎ Π΅Π³ΠΎ Π³Π»ΡŽΡ‡Π½ΠΎΡΡ‚ΠΈ. Если Π±Ρ‹ GCC Π³Π»ΡŽΡ‡ΠΈΠ», Π²ΠΎΠΎΠ±Ρ‰Π΅ Π±Ρ‹ Π½ΠΈΠ³Π΄Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ. Π’Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вспомнитС, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈΠΌ компилируСтся ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π‘ΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΠΈ GCC Π΄Π΅Π»Π°ΡŽΡ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΡƒΡŽ, ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ с большим профСссионализмом. Бпасибо ΠΈΠΌ. Π― Ρ€Π°Π΄, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³Ρƒ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ PVS-Studio Π½Π° Ρ‚Π°ΠΊΠΎΠΌ высококачСствСнном ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.

Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ скаТСт, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ компилятора Clang всё Ρ€Π°Π²Π½ΠΎ ΠΊΡ€ΡƒΡ‡Π΅, напомню: Π² Π½Ρ‘ΠΌ PVS-Studio Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ» ошибки: 1, 2.

PVS-Studio

Π― ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ» ΠΊΠΎΠ΄ GCC с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Alpha-вСрсии Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° PVS-Studio for Linux. ΠœΡ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Π²ΡˆΠΈΠΌΡΡ программистам Beta-Π²Π΅Ρ€ΡΠΈΡŽ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π² сСрСдинС сСнтября 2016 Π³ΠΎΠ΄Π°. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΡ‚ΠΎ смоТСт ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Beta-Π²Π΅Ρ€ΡΠΈΡŽ PVS-Studio for Linux Π½Π° своём ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ «PVS-Studio признаётся Π² любви ΠΊ Linux».

Если Π²Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΠΎΠ·ΠΆΠ΅, Ρ‡Π΅ΠΌ ΡΠ΅Π½Ρ‚ΡΠ±Ρ€ΡŒ 2016, ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ PVS-Studio for Linux, Ρ‚ΠΎ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ°ΡŽ вас Π½Π° страницу ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°: http://www.viva64.com/ru/pvs-studio/

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ

ΠœΡ‹ Π΄ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π΄ΠΎ самого интСрСсного Ρ€Π°Π·Π΄Π΅Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, я Π΄ΡƒΠΌΠ°ΡŽ, с Π½Π΅Ρ‚Π΅Ρ€ΠΏΠ΅Π½ΠΈΠ΅ΠΌ ΠΆΠ΄ΡƒΡ‚ наши постоянныС Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ. Рассмотрим участки ΠΊΠΎΠ΄Π°, Π³Π΄Π΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ нашСл ошибки ΠΈΠ»ΠΈ ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹.

К соТалСнию, я Π½Π΅ ΠΌΠΎΠ³Ρƒ Π²Ρ‹Π΄Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ компилятора ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΎΡ‚Ρ‡Ρ‘Ρ‚. Π’ Π½Π΅ΠΌ ΠΏΠΎΠΊΠ° слишком ΠΌΠ½ΠΎΠ³ΠΎ мусора (Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний), связанных с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π³ΠΎΡ‚ΠΎΠ² ΠΊ встрСчС с ΠΌΠΈΡ€ΠΎΠΌ Linux. НуТно ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡŽ количСства Π»ΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ конструкции. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ ΠΏΠΎΡΡΠ½ΠΈΡ‚ΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. МногиС диагностики Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€ΡƒΠ³Π°Ρ‚ΡŒΡΡ Π½Π° выраТСния, относящиСся ΠΊ макросам assert. Π­Ρ‚ΠΈ макросы Π±Ρ‹Π²Π°ΡŽΡ‚ устроСны вСсьма творчСски ΠΈ Π½Π°Π΄ΠΎ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½Π° Π½ΠΈΡ… Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. Но Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ опрСдСляСтся макрос assert ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ, ΠΈ Π½Π°Π΄ΠΎ ΠΎΠ±ΡƒΡ‡ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ всСм Ρ‚ΠΈΠΏΠΎΠ²Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌ.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² GCC ΠΏΡ€ΠΎΡˆΡƒ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Beta-вСрсии Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. Π― Π½Π΅ Ρ…ΠΎΡ‡Ρƒ ΠΈΡΠΏΠΎΡ€Ρ‚ΠΈΡ‚ΡŒ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠΌ, сгСнСрированным Π½Π΅Π΄ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ вСрсиСй.

Классика (Copy-Paste)

НачнСм ΠΌΡ‹ с самой классичСской ΠΈ распространённой ошибки, которая выявляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ диагностики V501. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ‚Π°ΠΊΠΈΠ΅ ошибки ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠ·-Π·Π° Π½Π΅Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ Copy-Paste ΠΈΠ»ΠΈ просто ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠ°ΠΌΠΈ, допускаСмыми ΠΏΡ€ΠΈ Π½Π°Π±ΠΎΡ€Π΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° PVS-Studio: V501 There are identical sub-expressions ‘!strcmp(a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1)’ to the left and to the right of the ‘&&’ operator. dwarf2out.c 1428

Быстро ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ошибки ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΈ слСдуСт Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒΡΡ. ИмСнно поэтому ошибка ΠΈ Π½Π΅ Π±Ρ‹Π»Π° выявлСна ΠΏΡ€ΠΈ ΠΎΠ±Π·ΠΎΡ€Π°Ρ… ΠΊΠΎΠ΄Π° ΠΈ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π΅.

Ѐункция strcmp Π΄Π²Π°ΠΆΠ΄Ρ‹ сравниваСт ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ строки. МнС каТСтся, Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π· слСдовало ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‡Π»Π΅Π½Ρ‹ класса lbl1, Π° lbl2. Π’ΠΎΠ³Π΄Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π₯ΠΎΡ‡Ρƒ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π·Π°Π½ΠΈΠΌΠ°Π» ΠΌΠ°Π»ΠΎ мСста ΠΏΠΎ оси X. На самом Π΄Π΅Π»Π΅, ΠΊΠΎΠ΄ выглядит Ρ‚Π°ΠΊ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции

Ошибки, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ΅Β» Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. НапримСр, ΠΎΡˆΠΈΠ±ΠΊΡƒ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π»Π΅Π³Ρ‡Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ссли ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Ρ‚Π°ΠΊ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ я рассматривал Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π² элСктронной ΠΊΠ½ΠΈΠ³Π΅ «Π“Π»Π°Π²Π½Ρ‹ΠΉ вопрос программирования, Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΈ всСго Ρ‚Π°ΠΊΠΎΠ³ΠΎ» (см. Π³Π»Π°Π²Ρƒ N13: Π’Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°ΠΉΡ‚Π΅ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Β«Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉΒ»). Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ всСм, ΠΊΡ‚ΠΎ заботится ΠΎ качСствС своСго ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΉ здСсь ссылкой.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Ρƒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, которая, я ΡƒΠ²Π΅Ρ€Π΅Π½, появилась ΠΈΠ·-Π·Π° Copy-Paste:

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° PVS-Studio: V519 The ‘has_avx512vl’ variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 500, 501. driver-i386.c 501

Π’ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ has_avx512vl Π΄Π²Π°ΠΆΠ΄Ρ‹ подряд Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ значСния. Π­Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла. Π― ΠΈΠ·ΡƒΡ‡ΠΈΠ» ΠΊΠΎΠ΄ ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ has_avx512ifma. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½Π° ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ebx & bit_AVX512IFMA. Π’ΠΎΠ³Π΄Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ:

ΠžΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠ°

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΡƒ испытаниС вашСй Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠ΄ ΠΈ, Π½Π΅ подсматривая Π½ΠΈΠΆΠ΅, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° PVS-Studio: V528 It is odd that pointer to ‘char’ type is compared with the ‘\0’ value. Probably meant: *xloc.file == ‘\0’. ubsan.c 1472

Π—Π΄Π΅ΡΡŒ программист случайно Π·Π°Π±Ρ‹Π» Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ xloc.file == ‘\0’. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ просто сравниваСтся с 0, Ρ‚.Π΅. с NULL. Никакого эффСкта это Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π°Π½Π΅Π΅ такая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΡƒΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ: xloc.file == NULL.

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ноль программист записал ΠΊΠ°ΠΊ ‘\0’. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ быстрСС ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π΅Π½ ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π½Π°Π΄ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. ΠŸΡ€ΠΎ это я Ρ‚Π°ΠΊΠΆΠ΅ писал Π² ΠΊΠ½ΠΈΠ³Π΅ (см. Π³Π»Π°Π²Ρƒ N9: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ для обозначСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ нуля Π»ΠΈΡ‚Π΅Ρ€Π°Π» ‘\0’).

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠΎΠ΄Π°:

Π₯отя, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΅Ρ‰Ρ‘ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΠΌ ΠΊΠΎΠ΄. Π― Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊ:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ, шанс Π΅Ρ‘ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡ΡƒΡ‚ΡŒ-Ρ‡ΡƒΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅:

ΠŸΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля

Π•Ρ‰Ρ‘ этот Ρ€Π°Π·Π΄Π΅Π» ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π°Π·Π²Π°Ρ‚ΡŒ «стотысячный ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡ‡Π΅ΠΌΡƒ макросы β€” это ΠΏΠ»ΠΎΡ…ΠΎΒ». Π― ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ люблю макросы ΠΈ всСгда ΠΏΡ€ΠΈΠ·Ρ‹Π²Π°ΡŽ помСньшС ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΡΡŽΡ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΠΏΡ€ΠΎΠ²ΠΎΡ†ΠΈΡ€ΡƒΡŽΡ‚ появлСниС ошибок, ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ статичСским Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°ΠΌ. Как ΠΌΠ½Π΅ показалось ΠΈΠ· Π½Π΅Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎ общСния с ΠΊΠΎΠ΄ΠΎΠΌ GCC, Π΅Π³ΠΎ Π°Π²Ρ‚ΠΎΡ€Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ Π»ΡŽΠ±ΡΡ‚ макросы. Π― замучался ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ, Π²ΠΎ Ρ‡Ρ‚ΠΎ раскрываСтся Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ макрос ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ поэтому пропустил Π½Π΅ΠΌΠ°Π»ΠΎ интСрСсных ошибок. ΠŸΡ€ΠΈΠ·Π½Π°ΡŽΡΡŒ, я ΠΈΠ½ΠΎΠ³Π΄Π° Π±Ρ‹Π²Π°ΡŽ Π»Π΅Π½ΠΈΠ². Но ΠΏΠ°Ρ€Ρƒ ошибок, связанных с макросами, я всё-Ρ‚Π°ΠΊΠΈ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ.

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° PVS-Studio: V595 The ‘odr_types_ptr’ pointer was utilized before it was verified against nullptr. Check lines: 2135, 2139. ipa-devirt.c 2135

Π’ΠΈΠ΄ΠΈΡ‚Π΅ здСсь ΠΎΡˆΠΈΠ±ΠΊΡƒ? Π”ΡƒΠΌΠ°ΡŽ, Π½Π΅Ρ‚, ΠΈ сообщСниС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ясности Π½Π΅ вносит. Всё Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ odr_types β€” это Π½Π΅ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° макрос, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Если Ρ€Π°ΡΠΊΡ€Ρ‹Ρ‚ΡŒ макрос ΠΈ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ всё Π½Π΅ относящССся ΠΊ Π΄Π΅Π»Ρƒ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

Π’ Π½Π°Ρ‡Π°Π»Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ разымСновываСтся, Π° ΠΏΠΎΡ‚ΠΎΠΌ провСряСтся. ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ это ΠΊ Π±Π΅Π΄Π΅ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚, ΡΠΊΠ°Π·Π°Ρ‚ΡŒ слоТно. ВсС зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ситуация, ΠΊΠΎΠ³Π΄Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ nullptr. Если такая ситуация Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°, Ρ‚ΠΎ слСдуСт ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ лишнюю ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ людСй, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ΄ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π°. Если ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ, Ρ‚ΠΎ это ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Π°Ρ ошибка, которая Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΅Ρ‰Ρ‘ большСго внимания ΠΈ исправлСния.

Рассмотрим Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ случай:

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° PVS-Studio: V595 The ‘list’ pointer was utilized before it was verified against nullptr. Check lines: 1627, 1629. sched-int.h 1627

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π½Π°ΠΌ ΠΎΠΏΡΡ‚ΡŒ потрСбуСтся ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ устройство макроса:

РаскрываСм макрос ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ:

И сСйчас ΠΌΠ½ΠΎΠ³ΠΈΠ΅ воскликнут: Β«Π‘Ρ‚ΠΎΠΏ, стоп! Π—Π΄Π΅ΡΡŒ Π½Π΅Ρ‚ ошибки. ΠœΡ‹ вСдь просто ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‡Π»Π΅Π½ класса. Никакого разымСнования Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля здСсь Π½Π΅Ρ‚. Π”Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ΄ Π½Π΅ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π΅Π½, Π½ΠΎ ошибки здСсь Π½Π΅Ρ‚!Β».

Всё Π½Π΅ Ρ‚Π°ΠΊ просто. Π—Π΄Π΅ΡΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. И Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, это просто Π²Π΅Π·Π΅Π½ΠΈΠ΅. На самом Π΄Π΅Π»Π΅, Ρ‚Π°ΠΊ ΠΏΠΈΡΠ°Ρ‚ΡŒ нСльзя. НапримСр, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ компилятор, ΡƒΠ²ΠΈΠ΄Π΅Π² list->first, ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ if (list). Π Π°Π· ΠΌΡ‹ выполняли ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ->, Π·Π½Π°Ρ‡ΠΈΡ‚ прСдполагаСтся, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Ρ€Π°Π²Π΅Π½ nullptr. Если это Ρ‚Π°ΠΊ, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

Π― написал Ρ†Π΅Π»ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ Π½Π° эту Ρ‚Π΅ΠΌΡƒ: «Π Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Π½ΠΈΠ΅ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ повСдСнию». Π’Π°ΠΌ ΠΊΠ°ΠΊ Ρ€Π°Π· рассматриваСтся Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ случай. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡΠΏΠΎΡ€ΠΈΡ‚ΡŒ, ΠΏΡ€ΠΎΡˆΡƒ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с этой ΡΡ‚Π°Ρ‚ΡŒΡ‘ΠΉ.

Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, рассмотрСнная ситуация Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слоТна ΠΈ Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π°. Π― Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³Ρƒ Π±Ρ‹Ρ‚ΡŒ всё-Ρ‚Π°ΠΊΠΈ Π½Π΅ΠΏΡ€Π°Π² ΠΈ ошибки здСсь Π½Π΅Ρ‚. Однако, Π΄ΠΎ сих ΠΏΠΎΡ€ ΠΌΠ½Π΅ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ смог это Π΄ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ. Π‘ΡƒΠ΄Π΅Ρ‚ интСрСсно ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² GCC, Ссли ΠΎΠ½ΠΈ обратят Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° эту ΡΡ‚Π°Ρ‚ΡŒΡŽ. Π£ΠΆ ΠΎΠ½ΠΈ-Ρ‚ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ компилятор ΠΈ слСдуСт Π»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΊΠ°ΠΊ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ, ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

ИспользованиС Ρ€Π°Π·Ρ€ΡƒΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ массива

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° PVS-Studio: V507 Pointer to local array ‘buf’ is stored outside the scope of this array. Such a pointer will become invalid. hsa-dump.c 704

Π‘Ρ‚Ρ€ΠΎΠΊΠ° формируСтся Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ Π±ΡƒΡ„Π΅Ρ€Π΅ buf. АдрСс этого Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° сохраняСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ name ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Π°Π»Π΅Π΅ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Ошибка Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ послС записи Π±ΡƒΡ„Π΅Ρ€Π° Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ name, сам этот Π±ΡƒΡ„Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ€Π°Π·Ρ€ΡƒΡˆΠ΅Π½Π½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ нСльзя. Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ этот ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΏΠΎΠ»Π½Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² проявлСния Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ повСдСния.

Π’ любом случаС, этот ΠΊΠΎΠ΄ содСрТит ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈ Π΅Ρ‘ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. Π Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎ Ρ‚ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, Ρ‡Ρ‚ΠΎ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌ использованиС Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ хранСния Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ массивов. И Ρ‚ΠΎΠ³Π΄Π°, хотя массив, созданный Π½Π° стСкС, считаСтся Ρ€Π°Π·Ρ€ΡƒΡˆΠ΅Π½Π½Ρ‹ΠΌ, Π½Π° самом Π΄Π΅Π»Π΅ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°Ρ‚ΡŒ, ΠΈ функция ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’ΠΎΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π²Π΅Π·Π΅Π½ΠΈΠ΅ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒΡΡ ΠΈ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π» 10 Π»Π΅Ρ‚, Π²Π΄Ρ€ΡƒΠ³, ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ Π½Π° Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ компилятора, Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ вСсти сСбя ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, достаточно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ массив buf Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ области видимости, Ρ‡Ρ‚ΠΎ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ name:

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… дСйствий, нСзависимо ΠΎΡ‚ условия

Анализатор выявил участок ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ я Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ. Однако, ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ, нСзависимо ΠΎΡ‚ Π΅Ρ‘ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ дСйствия. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это Π·Π°Π΄Π΅Π» Π½Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ ΠΈ ΠΏΠΎΠΊΠ° всё ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, Π½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ этот участок ΠΊΠΎΠ΄Π° явно стоит.

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° PVS-Studio: V523 The ‘then’ statement is equivalent to the ‘else’ statement. tree-ssa-threadupdate.c 2596

Если этот ΠΊΠΎΠ΄ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ, я, ΠΊ соТалСнию, Π½Π΅ Π΄ΠΎΠ³Π°Π΄Ρ‹Π²Π°ΡŽΡΡŒ ΠΊΠ°ΠΊ Π΅Π³ΠΎ слСдуСт ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‚ случай, ΠΊΠΎΠ³Π΄Π° Π½Π°Π΄ΠΎ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΌ с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ внСсти ΠΏΡ€Π°Π²ΠΊΡƒ.

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° PVS-Studio: V590 Consider inspecting this expression. The expression is excessive or contains a misprint. gensupport.c 1640

Нас интСрСсуСт условиС: (alt mode == mode’ to the left and to the right of the ‘&&’ operator. expmed.c 2573

Π”Π²Π° Ρ€Π°Π·Π° подряд провСряСтся mode, Π½ΠΎ Π·Π°Ρ‚ΠΎ Π½Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ cost. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ΄Π½ΠΎ ΠΈΠ· сравнСний Π½ΡƒΠΆΠ½ΠΎ просто ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ, Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΡƒΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ cost. МнС слоТно ΡΡƒΠ΄ΠΈΡ‚ΡŒ, Π½ΠΎ ΠΊΠΎΠ΄ явно стоит ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ.

Π”ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ присваиваний

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ участки ΠΊΠΎΠ΄Π°, Π½Π° ΠΌΠΎΠΉ взгляд, Π½Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ опасности ΠΈ, каТСтся, Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ΡΡ присваиваниС ΠΌΠΎΠΆΠ½ΠΎ просто ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ.

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° PVS-Studio: V519 The ‘structures’ variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 842, 845. gengtype.c 845

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° PVS-Studio: V519 The ‘nargs’ variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 39951, 39952. i386.c 39952

ПослСдний случай Π±ΠΎΠ»Π΅Π΅ странный, Ρ‡Π΅ΠΌ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚ΡƒΡ‚ Π΅ΡΡ‚ΡŒ какая-Ρ‚ΠΎ ошибка. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ steptype Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ присваиваСтся 2 ΠΈΠ»ΠΈ 3 Ρ€Π°Π·Π°. Π­Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° PVS-Studio: V519 The ‘steptype’ variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 5173, 5174. tree-ssa-loop-ivopts.c 5174

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π― Ρ€Π°Π΄, Ρ‡Ρ‚ΠΎ написал эту ΡΡ‚Π°Ρ‚ΡŒΡŽ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠ½Π΅ Π΅ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π²ΠΈΠ΄Π° Β«PVS-Studio Π½Π΅ Π½ΡƒΠΆΠ΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС Ρ‚Π΅ ΠΆΠ΅ прСдупрСТдСния Π²Ρ‹Π΄Π°Ρ‘Ρ‚ ΠΈ GCCΒ». Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, PVS-Studio ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт ΠΈ прСвосходит ΠΏΠΎ диагностичСским возмоТностям GCC. Π― Π½Π΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π² GCC Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Π΅ диагностики. Π­Ρ‚ΠΎΡ‚ компилятор, ΠΏΡ€ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎΠΉ настройкС, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ выявляСт ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π² ΠΊΠΎΠ΄Π΅. Но PVS-Studio β€” это спСциализированный ΠΈ быстро Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉΡΡ инструмСнт, Π° это Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΎΠ½ всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ ошибки Π² ΠΊΠΎΠ΄Π΅, Ρ‡Π΅ΠΌ это Π΄Π΅Π»Π°ΡŽΡ‚ компиляторы.

ΠŸΡ€ΠΈΠ³Π»Π°ΡˆΠ°ΡŽ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… извСстных ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², посСтив этот Ρ€Π°Π·Π΄Π΅Π» нашСго сайта. А Ρ‚Π°ΠΊΠΆΠ΅, Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Twitter, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° ΠΌΠ½ΠΎΠΉ @Code_Analysis. Π― рСгулярно ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽ ссылки Π½Π° интСрСсныС ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° языкС C ΠΈ C++, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽ ΠΎ Π½ΠΎΠ²Ρ‹Ρ… достиТСниях нашСго Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции

Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ с англоязычной Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΉ, Ρ‚ΠΎ ΠΏΡ€ΠΎΡˆΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ссылку Π½Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄: Andrey karpov. Bugs found in GCC with the help of PVS-Studio.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡ компилятора Π² Π‘++: ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ нСльзя ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒ

Π—Π°ΡˆΠ΅Π» Ρƒ нас Π² Cloud4Y Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π² ΠΎΠ±Π»Π°ΠΊΠ΅ ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΉ язык программирования ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ ΠΏΡ€Π°Π²Ρƒ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ самым Β«ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΌΒ». Π”ΠΎΠ»Π³ΠΎ Π»ΠΈ ΠΊΠΎΡ‚Ρ€ΠΎΡ‚ΠΊΠΎ Π»ΠΈ, дошли Π΄ΠΎ обсуТдСния ошибок копмиляторов β€” ΠΎ ΠΈΡ… двоякой Π½Π°Ρ‚ΡƒΡ€Π΅: ΠΈ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС нСльзя, ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ β€” ΡƒΠΌΠΎΠΌ Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚ΡŒΡΡ Π½Π΅Π΄ΠΎΠ»Π³ΠΎ. БСгодня ΠΌΡ‹ прСдставим Π²Π°ΠΌ нСбольшой сцСнарий обращСния с прСдупрСТдСниями компилятора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π³Ρ€ΡƒΠ±ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈ сохранит Π½Π΅Ρ€Π²Π½ΡƒΡŽ систСму Π² порядкС.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции

ΠœΡ‹ часто Π²ΠΈΠ΄ΠΈΠΌ прСдупрСТдСния компилятора ΠΎΠ± участках ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈΠ»ΠΈ ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΡΡ‚ΠΈΠ»ΡŒ. Иногда ΠΎΠ½ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, поэтому Π½Π΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈΡ….

НС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ прСдупрСТдСния компилятора

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, эти прСдупрСТдСния Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ Ρ€Π°Π·Π΄Ρ€Π°ΠΆΠ°Ρ‚ΡŒ; ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, Ρ‡Π°Ρ‰Π΅ всСго ΠΎΠ½ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ для идСально Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ содСрТит Π±Π°Π³ΠΎΠ².

Но Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… тысяч ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ компилятора Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ смысл. Иногда ΠΌΡ‹ пишСм ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ компилируСтся, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΆΠ΅, Π²ΠΎ имя Π₯Π°Π±Ρ€Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ? Как ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΎΡ‚ сотСн Π΄Ρ€ΡƒΠ³ΠΈΡ…, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ΄ дСйствитСлСн? НСуТСли Π½ΡƒΠΆΠ½ΠΎ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΡ… всС? Π­Ρ‚ΠΎ практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
ΠŸΡ€ΠΈΠΌΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ Β«Π±Π΅Π· ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉΒ»

Если ΡƒΠΆ совсСм чСстно, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с прСдупрСТдСниями компилятора β€” ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΈΠ»ΠΈ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π½ΠΈΡ…. Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… β€” Π·Π½Π°Ρ‡ΠΈΡ‚ Π²Ρ‹Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π² мусорноС Π²Π΅Π΄Ρ€ΠΎ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π±Π°Π³ΠΈ. Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ Π»ΠΈ Π²Ρ‹ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ сквозь ΠΏΠ°Π»ΡŒΡ†Ρ‹ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… ошибок? НавСрноС, Π½Π΅Ρ‚.

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ свой ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ

Π₯отя ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°ΠΌ ΠΈ хочСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ компилятор просто ΠΏΡ€ΠΎΠΌΠΎΠ»Ρ‡Π°Π» ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΈ, Π»ΡƒΡ‡ΡˆΠ΅ просто ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄. Если ΠΊΠΎΠ΄ Π½Π΅ понятСн компилятору, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ всС ΡˆΠ°Π½ΡΡ‹, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ понятСн ΠΈ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ Ρ‚ΠΎΠΆΠ΅.

ΠŸΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ свои намСрСния Π² ΠΊΠΎΠ΄Π΅ часто достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π°ΠΌΠΎΠ»Ρ‡Π°Ρ‚ΡŒ компилятор. НСкоторыС компиляторы ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π°Ρ‚ΡŒ подсказку, ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ прСдупрСТдСния. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° часто ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ прСдупрСТдСния ΠΎ присваивании Π² условном контСкстС:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции

Для Clang это выглядит Ρ‚Π°ΠΊ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции

Π’Ρ‚ΠΎΡ€ΠΎΠΉ случай, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅ΠΆΠΈΡ‚ Π² основС этого прСдупрСТдСния: ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΡ‹ пишСм a = b, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΈΠΌΠ΅Π»ΠΈ Π² Π²ΠΈΠ΄Ρƒ a == b.

Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ компиляторы просто ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ написанноС Π½Π°ΠΌΠΈ Π·Π°Π΄Π°Π½ΠΈΠ΅ выглядит достаточно странно Π² этом участкС ΠΊΠΎΠ΄Π°, CLANG услуТливо пытаСтся ΡƒΠ³Π°Π΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ просто Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π½Π°ΠΌ, ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Ссли Π·Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° самом Π΄Π΅Π»Π΅ Ρ‚Π°ΠΊ ΠΈ Π±Ρ‹Π»ΠΎ Π·Π°Π΄ΡƒΠΌΠ°Π½ΠΎ. Π£ GCC Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, Π½ΠΎ Π±Π΅Π· прСдоставлСния Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции

МногиС ΠΎΡ‚Π΄Π°ΡŽΡ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ CLANG, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ позволяСт Π½Π°ΠΌ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ²ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΊΠΎΠ΄Π΅ Π±Π°Π³, Ρ‡Π΅Π³ΠΎ Π½Π΅ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π±Ρ‹, ΠΏΡ€ΠΈΠΌΠΈ ΠΌΡ‹ автоматичСски всС, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ компилятор.

Π”Π°ΠΆΠ΅ Ссли присваиваниС Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, принятиС прСдлоТСния компилятора ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Ρ‹ скобок ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ.

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния чистого ΠΊΠΎΠ΄Π°, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ присваиваниС ΠΈ условиС. Π“ΠΎΡ€Π°Π·Π΄ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ строкС для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, ΠΏΠΎ сути, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π•Π΄ΠΈΠ½ΠΎΠΉ ΠžΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΠΈ Π½Π° построчном базисС:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ошибка ΠΏΡ€ΠΈ компиляции

НС исправляйтС ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ компилятора автоматичСски, вноситС исправлСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Π΄ΡƒΠΌΠ°Π½Π½ΠΎ.
Π‘ΠΊΠ°ΠΆΠΈΡ‚Π΅ компилятору, прСдупрСТдСния ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π²Π°ΠΆΠ½Ρ‹ для вас

БущСствуСт нСсколько способов, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с компилятором ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ. ЕстСствСнно, написаниС ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ понятСн Π΄Π°ΠΆΠ΅ бСднягС компилятору β€” Π»ΡƒΡ‡ΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Однако Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ компилятору, ΠΊΠ°ΠΊΠΈΠ΅ прСдупрСТдСния вас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚, Π° ΠΊΠ°ΠΊΠΈΠ΅ β€” Π½Π΅Ρ‚.

Π€Π»Π°Π³ΠΈ компилятора

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ извСстный Π½Π°ΠΌ компилятор обСспСчиваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ. МоТно ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, Π° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ прСдупрСТдСния Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ эти возмоТности ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π² настройках IDE. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρƒ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ СдинствСнноС мСсто β€” ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ваш Π±ΠΈΠ»Π΄ скрипт β€” Π³Π΄Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ эти настройки ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ.

КакиС Ρ„Π»Π°Π³ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ? Π­Ρ‚ΠΎ зависит частично ΠΎΡ‚ компилятора, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°Π·Π½Ρ‹Π΅ компиляторы ΡΠΌΠΈΡ‚ΠΈΡ€ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ прСдупрСТдСния, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ просто ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΌΠΈ, Π° Π±Ρ€Π΅Π΄ΠΎΠ²Ρ‹ΠΌΠΈ.

НСкоторыС прСдупрСТдСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ слишком ΠΏΠ΅Π΄Π°Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π½Π° ваш вкус ΠΈΠ»ΠΈ для вашСго стиля написания ΠΊΠΎΠ΄Π°, хотя Π½Π°ΠΌ Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ прСдупрСТдСния, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄ собой Π½ΠΈΠΊΠ°ΠΊΠΈΡ… оснований. (На наш взгляд Π²ΠΎΠΎΠ±Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ всС прСдупрСТдСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Π°ΠΆΠ½ΠΎΠ΅).

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Ρ„Π»Π°Π³ΠΈ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ β€” это Wall, Wpedantic, Wextra (ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ„Π»Π°Π³ΠΈ компилятора, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с W).
Если Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ Β«Π±Π΅Π· ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉΒ» для своСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π²Ρ‹, скорСС всСго, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ сотни ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ тысячи ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, Ссли ΠΎΠ½ΠΈ всС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹. НачнитС с Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ. ЗафиксируйтС Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ТСсткиС прСдупрСТдСния ΠΈ постСпСнно Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ свой ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ.

Если Π²Ρ‹ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°ΠΌ Π»Π΅Π½ΠΈ, ΠΈΠ»ΠΈ Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ, Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Β«Π±Π΅Π· ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉΒ», Ρ‚ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… совсСм Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ Ρ‚ΠΎ просто. Π£ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, содСрТащий ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², окаТСтся, Ρ‡Ρ‚ΠΎ это Π½Π΅ ошибка, ΠΊΠΎΠ΄ компилируСтся ΠΈ, вСроятно, Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡŒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΡƒΡ‡Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ рассосСтся, ΠΎΠ΄Π½ΠΎ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Pragma

Π‘Ρ‹Π²Π°ΡŽΡ‚ случаи, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ использованиС #pragma.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ услуТливо ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π» Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ скобки. Π­Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Π΅Ρ€Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, Π±ΡƒΠ΄ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ примСняСмы ΠΊ числовым значСниям. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ DSL читался, Π² Ρ‚Π°ΠΊΠΎΠΌ случаС трСбуСтся Π·Π°Π³Π»ΡƒΡˆΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Π½Π΅ трогая ΠΊΠΎΠ΄, здСсь ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ прСдупрСТдСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ #pragma Π² комплСксС с ΠΏΠΎΡΡΠ½ΡΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ.

ВмСсто Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ компилятор, сообщив Π΅ΠΌΡƒ, ΠΊΠ°ΠΊΠΈΠ΅ прСдупрСТдСния Π²Π°ΠΌ интСрСсны, Π° ΠΊΠ°ΠΊΠΈΠ΅ β€” Π½Π΅Ρ‚; ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ для этого Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈΠ»ΠΈ, Ссли потрСбуСтся, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #pragmas. Π‘Ρ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ Π±Ρ‹Ρ‚ΡŒ максимально строгими, Π½Π΅ добавляйтС слишком ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ остороТноС использованиС #pragmas ΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΎΡ‚ Π²Π°ΡˆΠΈΡ… стандартных Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.

Иногда Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· пСрСчислСнных способов Π½Π΅ являСтся рСалистичным Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ. Π’ΠΎΠ³Π΄Π° просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ для компилятора ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ shut up.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *