Вимкнення попереджень компілятора
У Visual Studio можна вказати попередження, які потрібно вимкнути, вказавши коди попереджень у конструкторі проектів (сторінки властивостей проекту). Ви також можете відключити попередження, задавши певні властивості безпосередньо у файлі проекту, за допомогою командного рядка або коду, якщо потрібно відключити попередження тільки в одному розташуванні.
Деякі компілятори та засоби збирання також мають параметри для вказівки рівня попередження. Це дозволяє керувати категоріями попередження за допомогою одного параметра. Для цих параметрів див. документацію з конкретної мови та компілятора, яку ви використовуєте:
Якщо ваша мета полягає в тому, щоб побачити більш короткі та орієнтовані вихідні дані в журналі складання, може знадобитися змінити деталізацію журналу складання. Доступні параметри: "Звичайний", "Детальний" або "Діагностика". Щоб отримати додаткові відомості про деталізацію, див. Практичний посібник. Перегляд, збереження та налаштування файлів журналу побудови.
Зверніть увагу, що попередження призначені для визначення потенційної проблеми з кодом, тому слід розуміти ризики відключення будь-якого конкретного попередження. Параметри Visual Studio вимикають попередження на рівні проекту. Можливо, вам буде потрібно використовувати більш цільовий підхід до вимкнення попереджень, ніж надає Visual Studio. Більшість компіляторів надають способи відключення попереджень лише для певних рядків коду, щоб ви могли продовжувати переглядати попередження, якщо вони відбуваються в іншому місці в тому ж проекті.
Вимкнення деяких попереджень для Visual C# та F#
Використовуйте властивості збирання для придушення певних попереджень для проекту C# і F#. Якщо ви бажаєте вимкнути попередження лише в певній частині коду C#, використовуйте попередження #pragma. Для F# використовуйте директиву препроцесора #nowarn , щоб вимкнути попередження всього вихідного файлу.
- У оглядачі рішень виберіть проект, у якому ви бажаєте вимкнути попередження.
- Клацніть правою кнопкою миші вузол проекту та виберіть пункт "Властивості " в контекстному меню. Або виберіть вузол проекту та натисніть клавіші ALT+ВВЕДЕННЯ.
- Виберіть " Складанняі перейдіть в підрозділ "Помилки та попередження ".
- У полі "Придушення попереджень" або "Придушення певних попереджень" вкажіть коди помилок попередження, які потрібно вимкнути, розділені крапкою з комою. Список та опис кодів попереджень див. у розділі "Повідомлення компілятора C#".
- Наново побудуйте рішення.
- У оглядачі рішень виберіть проект, у якому ви бажаєте вимкнути попередження.
- Клацніть правою кнопкою миші вузол проекту та виберіть пункт "Властивості " в контекстному меню. Або виберіть вузол проекту та натисніть клавіші ALT+ВВЕДЕННЯ.
- Виберіть сторінку збирання або розділ, а якщо ви знаходитесь у поточному інтерфейсі користувача, відкрийте підрозділ "Помилки та попередження".
- У полі "Придушення попереджень" або "Придушення певних попереджень" вкажіть коди помилок попередження, які потрібно вимкнути, розділені крапкою з комою. Список та опис кодів попереджень див. у розділі "Повідомлення компілятора C#".
- Знову побудуйте рішення.
Деякі попередження не можна вимкнути.Список цих елементів див. у розділі NoWarn компілятора.
Вимкнення деяких попереджень для C++
Ви можете вимкнути попередження у проекті C++ за допомогою властивостей проекту; Сторінка властивостей конфігурації використовується для придушення певних попереджень для проекту C++. Ви також можете вимкнути попередження у певних файлах за допомогою #pragma warning. У цій статті розглядається елемент управління на рівні проекту, але якщо ви маєте намір відключити попередження у певному файлі або приблизно в декількох рядках коду, але ви хочете продовжувати бачити інші входження того ж попередження, слід розглянути можливість використання #pragma warning. Див. #pragma попередження.
- У оглядачі рішень Виберіть проект або вихідний файл, у якому потрібно вимкнути попередження.
- У рядку меню виберіть Вид>Сторінки властивостей.
- Виберіть категорію Властивості конфігурації, категорію C/C++ і потім - сторінку Додатково.
- Виконайте одну з таких дій.
- У вікні Вимкнути деякі попередження вкажіть розділені точкою з комою коди помилок попереджень, які потрібно вимкнути.
- У вікні Вимкнути деякі попередження клацніть Змінити, щоб відобразити додаткові параметри.
- Натисніть кнопку ОК, а потім перебудуйте рішення.
Якщо попередження від іншого засобу, зверніться до документації щодо конкретного інструменту, щоб дізнатися, як можна вимкнути попередження для цього засобу. Наприклад, компонувальник C++ містить деякі попередження, які можна вимкнути за допомогою /IGNORE параметра компонувальника. Див. розділ /IGNORE (ігнорувати певні попередження) та встановити цей параметр, див.розділ /link (Передача параметрів для компонувальника).
Вимкнення попереджень для Visual Basic
Щоб приховати деякі попередження компілятора Visual Basic, змініть VBPROJ-файл проекту. Щоб вимкнути попередження певної категорії, використовуйте сторінку властивостей компілятора. Якщо ви бажаєте вимкнути попередження у певній частині файлу коду, використовуйте директиви #Disable та #Enable. Для отримання додаткових відомостей див. у статті Налаштування попереджень у Visual Basic.
Придушення певних попереджень для проекту Visual Basic
У цьому прикладі показано, як відключити окремі попередження компілятора налаштуваннями VBPROJ-Файлі.
- У оглядачі рішень виберіть проект, у якому ви бажаєте вимкнути попередження.
- У рядку меню виберіть Проект>Вивантажити проект.
- У Оглядач рішень відкрийте правою кнопкою миші або контекстне меню проекту, а потім виберіть "Змінити". XML-файл проекту відкриється у редакторі коду.
- Знайдіть елемент у конфігурації збірки і додайте один або кілька номерів попереджень. Якщо ви вказуєте кілька номерів попереджень, розділяйте їх комами. У наступному прикладі показаний елемент конфігурації збірки Debug на платформі x86, що пригнічує виведення двох попереджень компілятора.
x86
true
full
false
bin\Debug\
true
true
prompt
40059,42024
1
Примітка. За промовчанням проекти .NET Core не містять групи властивостей конфігурації збірки. Щоб вимкнути попередження для .NET Core, вручну додайте потрібний розділ конфігурації у файл. Наприклад:
Exe
netcoreapp2.0
VBDotNetCore_1
42016,41999,42017
Для отримання додаткових відомостей див. в описі компілятора /nowarn для компілятора командного рядка Visual Basic.
Вимкнення попередження шляхом редагування файлу проекту
Використання конструктора властивостей Visual Studio для придушення попереджень призводить до зміни файлу проекту. Іноді може бути зручніше редагувати файл проекту вручну, щоб виконати завдання відключення попередження. Файл проекту обробляється MSBuild, підсистемою збирання Майкрософт. Див. Розділ MSBuild.
Крім того, у Visual Studio 2019 версії 16.7 і раніше версіях деякі попередження від засобів, відмінних від компілятора, не можна придушувати іншим способом.
- Щоб відкрити файл проекту в редакторі Visual Studio, клацніть правою кнопкою миші вузол проекту та виберіть "Змінити файл проекту". Деякі типи проектів вимагають вивантаження проекту, перш ніж можна змінити файл проекту. Якщо необхідно вивантажити проект, клацніть правою кнопкою миші вузол проекту та виберіть " Вивантажити проект".
- У новому PropertyGroup розділі використовуйте NoWarn властивість. Перелічіть помилки, які потрібно вимкнути, розділені комами або комами. Для попередження компілятора можна опустити мовний код і ввести лише число, але для ясності рекомендується використовувати повний код. Для попереджень з інших засобів у складання вкажіть повний код, включаючи префікс (наприклад, MSB для попереджень, виданих самим MSBuild). Наступний код додає попередження CS0028 та CS0618 до списку вимкнених попереджень:
// Інші properties $(NoWarn);CS0028;CS0618
Вимкнення попередження з командного рядка збирання
Якщо ви створюєте проект з командного рядка, ви можете вимкнути попередження за допомогою -warnAsMessage командного рядка MSBuild. Використовуйте лапки навколо списків кількох попереджень.
MSBuild.exe -warnAsMessage="CS0028;CS0618" MyProject.csproj
Придушення попереджень інструментів
Як ви придушуєте попередження від засобів, відмінних від компілятора, наприклад MSBuild, залежить від типу проекту, який у вас є, і яку версію MSBuild ви використовуєте.
За допомогою MSBuild 16.8 та пізніших версій у проектах, які використовують пакет SDK або стандартний імпорт, можна вимкнути попередження засобу за допомогою описаних раніше методів. Необхідно вказати повний код помилки (включаючи префікс, наприклад, MSB для MSBuild), а не тільки число, як можна з попередженням компілятора. Крім того, повідомлення не усунуто; він, як і раніше, відображається як інформаційне повідомлення, але воно було знижено з попередження.
У разі використання MSBuild 16.7 і раніше версій, а також у будь-якому проекті, який не використовує пакет SDK або стандартний імпорт, ці попередження не придушуються за допомогою NoWarn . У таких випадках властивість, яку можна використовувати для придушення попереджень MSBuildWarningsAsMessages інструментів. Ви можете вимкнути попередження збірки, змінивши MSBuildWarningsAsMessages файл проекту або вказавши параметр у командному рядку MSBuild. При використанні MSBuildWarningsAsMessages використовуйте повний код помилки MSBuild, включаючи префікс MSB.
$(MSBuildWarningsAsMessages);MSB3270
Зверніть увагу, що деякі попередження MSBuild не можна вимкнути за допомогою MSBuildWarningsAsMessages. Щоб вимкнути їх, використовуйте параметр warnAsMessage командного рядка.
Крім того, деякі попередження мають певні властивості, які можна налаштувати для вимкнення попередження. Наприклад, відключається, MSB3253 задавши властивість:
По можливості використовуйте більш явну властивість, оскільки сам код помилки не такий зрозумілий. Еталонна сторінка помилки для коду зазвичай містить властивість, яка використовується для вимкнення.
Вимкнення попереджень для пакетів NuGet
У деяких випадках може вимагатися вимкнути попередження компілятора NuGet для одного пакета NuGet замість проекту. Можливо, ці попередження потрібні для конкретної мети і ви не хочете відключати їх на рівні проекту. Наприклад, одне із попереджень NuGet повідомляє про неповну сумісність пакета з проектом. Якщо ви відключите його на рівні проекту, а потім додати новий пакет NuGet, ви не зможете дізнатися про його можливу несумісність.
Вимкнення певних попереджень для одного пакета NuGet
- У оглядачі рішень виберіть пакет NuGet, для якого ви бажаєте вимкнути попередження компілятора.
Тепер ці попередження зникнуть із оглядача рішень і списку помилок. У файлі проекту встановлено властивість NoWarn.
all
runtime; build; native; вмістфайлів; analyzers; будоватрансітивна
NU5104
Пов'язаний контент
Як ігнорувати попередження у visual studio
Якщо ви використовуєте Visual Studio як середовище розробки, у меню лампочки Існують пункти, при виборі яких буде створено код для придушення попереджень. Щоб отримати додаткові відомості, див. Усунення порушень.
Вимкнення правила
При відключенні правила аналізу коду, що викликає попередження, ви відключаєте правило для всього файлу або проекту (залежно від області конфігурації, що використовується). Щоб вимкнути правило, встановіть рівень серйозності none у файлі конфігурації.
Додаткові відомості про рівні серйозності правил див.у розділі Налаштування рівня серйозності правила.
Використання директиви препроцесора
Використання атрибуту SuppressMessageAttribute
Ви можете використовувати SuppressMessageAttribute, щоб придушити попередження або у вихідному файлі, або у глобальному файлі придушень для проекту (GlobalSuppressions.cs або GlobalSuppressions.vb). Цей атрибут дозволяє пригнічувати попередження лише у певних частинах проекту чи файлу.
Два обов'язкові позиційні параметри для атрибуту SuppressMessageAttribute — це категорія правила та ідентифікатор правила. У наступному фрагменті коду передаються значення "Usage" та "CA2200: Rethrow to preserve stack details" для цих параметрів.
При додаванні атрибуту до глобального файлу придушення ви вказуєте бажаний рівень для області придушення, наприклад "member" . API, в якому слід пригнічувати попередження, вказується за допомогою Target.
Використовуйте ВД документації для API-інтерфейсу, на який ви посилаєтеся в атрибуті Target . Див. відомості про формат ІД документації.
Щоб придушити попередження для коду, створеного компілятором, який не відповідає наданому явно вихідному файлу користувача, необхідно додати атрибут придушення до глобального файлу придушення. Наприклад, наступний код пригнічує порушення у конструкторі, створеному компілятором:
Відфільтрувавши попередження компілятора одного або кількох видів, ви зможете забрати зайву інформацію з журналу збирання. Наприклад, ви можете регулювати обсяг вихідних даних, змінюючи рівень деталізації журналу складання: звичайний, докладний чи діагностичний. Для отримання додаткових відомостей про деталізацію див. у розділі Практичний посібник.Перегляд, збереження та налаштування файлів журналу збирання.
У браузері рішень виберіть проект, у якому ви бажаєте вимкнути попередження.
Перейдіть на сторінку Складання.
У вікні Вимкнути попередження через точку з комою вкажіть коди попереджень, які потрібно відключити.
Виконайте повторне складання рішення.
Вимкнення деяких попереджень для C++
Використовуйте сторінку властивостей Властивості конфігурації, щоб вимкнути конкретні попередження для проектів C++.
У браузері рішень виберіть проект або вихідний файл, у якому хочете вимкнути попередження.
Виберіть категорію Властивості конфігурації, категорію C/C++, а потім — Додатково.
Виконайте одну з таких дій.
У вікні Вимкнути деякі попередження вкажіть розділені точкою з комою коди помилок попереджень, які потрібно вимкнути.
У вікні Вимкнути деякі попередження натисніть кнопку Змінити, щоб відобразити додаткові параметри.
Вимкнення попереджень для Visual Basic
Щоб приховати деякі попередження компілятора Visual Basic, змініть VBPROJ-файл проекту. Щоб вимкнути попередження певної категорії, використовуйте сторінку властивостей компілятора. Щоб отримати додаткові відомості, див. Налаштування попереджень у програмі Visual Basic.
Вимкнення деяких попереджень для Visual Basic
У цьому прикладі показано, як відключити окремі попередження компілятора налаштуваннями VBPROJ-Файлі.
У браузері рішень виберіть проект, у якому ви бажаєте вимкнути попередження.
У рядку меню виберіть Проект > Вивантажити проект.
У браузері рішень відкрийте контекстне меню для проекту та виберіть Змінити .vbproj.
XML-файл проекту відкриється у редакторі коду.
Знайдіть елемент у конфігурації збірки і додайте один або кілька номерів попереджень. Якщо ви вказуєте кілька номерів попереджень, розділяйте їх комами.
У наступному прикладі показаний елемент конфігурації збірки Debug на платформі x86, що пригнічує виведення двох попереджень компілятора.
Збережіть зміни в VBPROJ-файлі.
У рядку меню виберіть Проект > Перезавантажити проект.
У рядку меню послідовно виберіть пункт Складання > Перебудувати рішення.
У вікні Виведення вказані попередження більше не відображаються.
Для отримання додаткових відомостей див. в описі компілятора /nowarn для компілятора командного рядка Visual Basic.
Вимкнення попереджень для пакетів NuGet
У деяких випадках потрібно вимкнути попередження компілятора NuGet лише для одного пакета NuGet, а не для всього проекту. Можливо, ці попередження потрібні для конкретної мети і ви не хочете відключати їх на рівні проекту. Наприклад, одне із попереджень NuGet повідомляє про неповну сумісність пакета з проектом. Якщо ви відключите його на рівні проекту, а потім додати новий пакет NuGet, ви не зможете дізнатися про його можливу несумісність.
Вимкнення певних попереджень для одного пакета NuGet
У браузері рішень виберіть пакет NuGet, для якого ви бажаєте вимкнути попередження компілятора.
Виберіть Властивості в контекстному меню або меню правої кнопки миші.
У полі NoWarn властивостей пакета введіть номер попередження, який потрібно відключити для цього пакета. Якщо ви маєте намір відключити кілька попереджень, розділіть їх номери комами.
Тепер ці попередження зникнуть із оглядача рішень та списку помилок.
Часто корисно вказати, що попередження не застосовується. Це вказує членам команди, що код було перевірено, і що попередження можна придушити. У цій статті описуються різні способи вимкнення порушень аналізу коду за допомогою інтегрованого середовища розробки Visual Studio.
Пригнічувати порушення за допомогою файлу EditorConfig
У файлі EditorConfig задайте рівень серйозності none, наприклад dotnet_diagnostic.CA1822.severity=none. Додаткові відомості про додавання файлу EditorConfig див. у розділі Додавання файлу EditorConfig до проекту.
Пригнічувати порушення у вихідному коді
Помістіть курсор у рядок коду з порушенням та натисніть клавішу CTRL+(.), щоб відкрити меню швидкі дії. Виберіть ПОДАВЛЯТИ какскскскс, а потім виберіть джерело або джерело (атрибут).
Якщо вибрати поле Джерело, ви побачите попередню версію директиви препроцесора, яка буде додана в код.
Якщо вибрано поле Джерело (атрибут), відображається попередній перегляд атрибуту SuppressMessage , який буде додано до коду.
Виберіть правила, які потрібно вимкнути, і клацніть правою кнопкою миші та виберіть придушити > у джерелі.
У діалоговому вікні Перегляд змін натисніть кнопку Застосувати.
Якщо браузер рішень не відображається пункт придушити , то, швидше за все, це сталося через складання, а не для інтерактивного аналізу. Список помилок відображає діагностичні або порушення правил, як у реальному коді, так і у збиранні. Так як діагностика складання може бути застарілою, наприклад, якщо ви змінили код, щоб усунути порушення, але воно не було перебудовано, ви не зможете відключити ці діагностичні дані від списку помилок.Діагностика з інтерактивного аналізу або IntelliSense завжди актуальні з поточними джерелами і можуть бути пригнічені зі списку помилок. Щоб виключити діагностику складання з вибору, переключіть фільтр джерела Список помилок зі складання + IntelliSense на IntelliSense. Потім виберіть діагностику, яку потрібно вимкнути, і продовжуйте, як описано вище.
Пригнічувати порушення за допомогою файлу глобального придушення
У списку помилок виберіть правила, які потрібно вимкнути, а потім клацніть правою кнопкою миші та виберіть пригнічувати > у файлі придушення. Відкриється діалогове вікно Перегляд змін , в якому буде показано попередній перегляд SuppressMessageAttribute атрибута, який додається до глобального файлу придушення.
У редакторі коду помістіть курсор у рядок коду з порушенням та натисніть клавіші швидкої дії та рефакторингу (або натисніть клавішу CTRL + period (. )), щоб відкрити меню швидкі дії . Виберіть ПРИДАВАННЯ какскскскс, а потім виберіть у файлі придушення. Ви побачите попередню версію файлу глобального придушення, який буде створено або змінено.
- У меню аналіз виберіть пункт аналізувати > збирання та пригнічувати активні проблеми у рядку меню, щоб вимкнути всі поточні порушення. Іноді це називається "завдання базових показників".
- у меню аналіз виберіть аналізувати > виконання Code Analysis та пригнічувати активні проблеми у рядку меню, щоб вимкнути усі поточні порушення. Іноді це називається "завдання базових показників".
Пригнічувати порушення за допомогою параметрів проекту
Пригнічувати порушення за допомогою набору правил
У редакторі набору правил зніміть прапорець поруч із його ім'ям або дією встановити значення немає.
Придушення у вихідний код та атрибут SuppressMessage
Придушення вихідного коду (ISS) використовує SuppressMessageAttribute атрибут для придушення попередження. Атрибут можна помістити ближче до сегмента коду, що спричинив попередження. Можна додати атрибут SuppressMessageAttribute у вихідний файл, ввівши його, або можна використовувати контекстне меню попередження до Список помилок , щоб додати його автоматично.
SuppressMessageAttributeАтрибут є умовним атрибутом, включеним у метадані Il збірки керованого коду, лише якщо символ компіляції CODE_ANALYSIS визначено під час компіляції.
Не слід використовувати придушення у вихідному вигляді у збірках випуску, щоб запобігти випадковому пересиланню метаданих придушення у вихідному джерелі. Крім того, через витрати на обробку придушення у вихідному коді продуктивність програми може знизитися.
якщо ви переносите проект на Visual Studio 2017, можливо, раптово стикається з великою кількістю попереджень аналізу коду. якщо ви не готові усунути попередження, їх можна вимкнути, вибравши пункт аналіз > виконання Code Analysis та придушувати активні проблеми.
якщо ви переносите проект на Visual Studio 2019, можливо, раптово стикається з великою кількістю попереджень аналізу коду. Якщо ви не готові усунути попередження, їх можна вимкнути, вибравши пункт аналізувати > збирання та пригнічувати активні проблеми.
SuppressMessage - атрибут
При виборі параметра придушувати в контекстному меню або клацанні правою кнопкою миші попередження аналізу коду до списку помилок SuppressMessageAttribute атрибут додається або до коду, або до глобального файлу придушення проекту.
SuppressMessageAttributeАтрибут має такий формат:
До властивостей атрибута належать:
Category — Категорія, в якій визначено правило. Додаткові відомості про категорії правил аналізу коду див.
CheckId - ідентифікатор правила. Підтримка включає коротке ім'я для ідентифікатора правила.
Scope — цільовий об'єкт, у якому попередження пригнічується.
module — Ця область пригнічує попередження для збирання.
type — Ця сфера пригнічує попередження типу.
member — Ця область пригнічує попередження елемента.
namespace — Ця сфера пригнічує попередження щодо простору імен.
namespaceanddescendants -(потрібно компілятор версії 3. x або вище і Visual Studio 2019) ця область пригнічує попередження у просторі імен та всіх його дочірніх символів Значення ігнорується застарілим аналізом.
Target — це ідентифікатор, який використовується для вказівки цільового об'єкта, в якому попередження придушується. Він повинен містити повне ім'я елемента.
При появі попереджень у Visual Studio можна переглянути приклади SuppressMessage , додавши придушення до глобального файлу придушення.
Використання SuppressMessage
Code Analysis попередження пригнічуються на рівні, до якого SuppressMessageAttribute застосовується атрибут.Наприклад, атрибут можна застосувати на рівні збирання, модуля, типу, члена або параметра. Метою цього є тісне зв'язування інформації про придушення з кодом, де відбувається порушення.
Загальна форма придушення включає категорію правила та ідентифікатор правила, який містить необов'язкове зручне сприйняття подання імені правила. Приклад:
За наявності достатньої продуктивності для мінімізації метаданих придушення у вихідному вигляді ім'я правила можна опустити. Категорія правила та ідентифікатор його правила разом становлять досить унікальний ідентифікатор правила. Приклад:
Для зручності обслуговування не рекомендується вказувати ім'я правила.
Пригнічувати вибіркові порушення всередині тіла методу
До методу можуть застосовуватися атрибути придушення, але вони можуть бути впроваджені в тіло методу. Це означає, що всі порушення конкретного правила пригнічуються при додаванні SuppressMessageAttribute атрибута до методу.
Щоб вимкнути певне порушення правила, вкажіть ім'я символу для MessageId властивості атрибута SuppressMessageAttribute. У наступному прикладі показаний код з двома порушеннями CA1500: вариабленамесшаулднотматчфіелднамес - один для name змінної та інший для age змінної. Пригнічується лише порушення для age символу.
Пригнічення на глобальному рівні
[module: SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "MyNamespace")]
При придушенні попередження з namespace областю попередження придушується по простору імен. Попередження не пригнічується за типами у просторі імен.
Усі придушення можна виразити, вказавши явну область. Ці придушення мають бути на глобальному рівні.Придушення лише на рівні члена не можна вказати шляхом оформлення типу.
[module: SuppressMessage("Microsoft.Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="Microsoft.Tools.FxCop.Type..ctor()")]
Target завжди містить повну назву елемента.
Файл глобального придушення
Область придушення модуля
Порушення якості коду для всієї збірки можна вимкнути за допомогою області модуля.
Створений код
Компілятори керованого коду та деякі сторонні засоби створюють код для спрощення розробки коду. Створений компілятор код, який відображається у вихідних файлах, зазвичай відзначається GeneratedCodeAttribute атрибутом.
Для традиційного аналізу коду можна вибрати, чи слід придушувати попередження та помилки аналізу коду для створеного коду. Відомості про придушення таких попереджень та помилок див. у розділі Як вимкнути попередження для створеного коду.
Аналіз коду ігнорується GeneratedCodeAttribute при застосуванні до цілої збірки або одного параметра.
Звичайна ситуація: ви написали шматок бездоганно правильного коду, але Visual C++ видає попередження. Часто можна трохи переписати код, щоб попередження відійшло, але не завжди, і тоді вихід один – глушити видачу цього попередження.
Розглянемо, які можливості для цього є у Visual C++ і яких помилок припускаються при їх використанні.
Наступна можливість – заборонити попередження у налаштуваннях проекту на рівні файлу. Цей спосіб ще гірший за попередній. По-перше, попередження буде заглушено всю одиницю трансляції, тобто. у цьому файлі та всіх заголовках, які він включає. По-друге, ті самі проблеми з копіюванням коду, що й минулого разу.По-третє, як тільки в проекті виявляється більше кількох файлів, ймовірність втратити цю настройку при конверсії проекту під нову версію Visual C++ стає меншою, ніж одиниці.
… і залишаються дуже задоволені собою. Попередження заглушили, код написали, попередження відновили. Прибуток.
1. встановлює попередження рівень за умовчанням та
2. включає попередження.
Спочатку рівні. У Visual C++ з кожним попередженням пов'язане число від 1 до 4 – це рівень попередження. Попередження рівня 1 вважаються серйознішими, зі зростанням рівня серйозність нібито знижується. Кожне попередження має рівень за замовчуванням. Конструкція
встановлює попередження зазначений у ньому рівень і включає попередження, тобто. рівень не прибитий цвяхами, його можна міняти.
Компілятор має налаштування, з якого рівня попередження показувати, Warning Level. При значенні цієї настройки, що дорівнює A, попередження в певному рядку коду відображається лише в тому випадку, якщо воно там дозволено і його рівень становить A або нижче.
Крім того, у Visual C++ частина попереджень за замовчуванням вимкнена, тому що вони видаються навіть у найнешкідливішому коді і всі від них втомилися. Нехай кожен, хто збирається обуритися самою ідеєю точкового придушення конкретного попередження, спочатку усвідомить і відчує цей факт.
Навіщо він це робить, якщо попередження і так вимкнено? Список попереджень, вимкнених за замовчуванням, змінюється від однієї версії Visual C++ до іншої – до нього потроху додаються попередження.Якщо код спочатку писали для Visual C++ 7, а там C9001 було включено, а тепер компілюють в Visual C++ 10, і в ньому попередження вже вимкнено, то така конструкція сенсу не має, а могла просто дістатись у спадок.
Що особливо приємно, ці ситуації виникають у найкращий момент – при переході з однієї версії компілятора на іншу, при спробі включити в проект купу стороннього коду, який і без того не простий у використанні, друга ситуація просто призводить до придушення попередження, в результаті можна пропустити помилку в коді, яка пізніше допоможе користувачам здобути премію Дарвіна.
Насправді попередження потрібно глушити так:
Перша конструкція зберігає поточний стан налаштувань попереджень, друга відключає потрібне попередження, третя відновлює збережений стан. При цьому стан відновлюється повністю – усі зроблені рівнями вище за зміни теж відновлюються, попередження, вимкнені за замовчуванням, не включаються.
Виглядає страшно, але чого не зробиш, щоб не пропустити ту саму помилку на мільярд.
