Russian Qt Forum
Ноябрь 25, 2024, 01:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отключение избранных предупреждений директивами компилятора  (Прочитано 9994 раз)
Odyssey
Гость
« : Июнь 22, 2012, 14:12 »

В известной книге серии С++ In-Depth "101 совет..." чуть ли не первым пунктом стоит избавление ото всех предупреждений компилятора на максимальном уровне. Их позволяется отключать, кажется, в одном случае: если они есть в поставляемой библиотеке. Вместо нее предлагается подключать наш собственный файл, являющийся "оберткой" исходной библиотеки, в которой однако специальными командами компилятора предлагается на время отключать вывод тех ошибок, которые в сторонней библиотеке содержатся.

Однако мне было не до конца понятно, как именно отключать конкретные типы предупреждений и как определить, какой номер, скажем, у предупреждения "unused variable". А как вы это делаете? Улыбающийся

UPD.
Вот как это было сделано в книге Саттера/Александреску. Требуются номера предупреждений...

#pragma warning(push) //Отключение предупреждений только для данного заголовочного файла
#pragma warning(disable:4512)
#pragma warning(disable:4180)
#include "lib.h" //Исходная, "обертываемая" библиотека
#pragma warning(pop) //Восстанавливаем исходный уровень вывода предупреждений
« Последнее редактирование: Июнь 25, 2012, 14:42 от Odyssey » Записан
mutineer
Гость
« Ответ #1 : Июнь 22, 2012, 14:24 »

Номер предупреждения видно же в выхлопе компилятора
Записан
Odyssey
Гость
« Ответ #2 : Июнь 22, 2012, 14:34 »

Да вот - смотрел в окне Compile Output и не нашел Грустный  (Qt Creator для Qt 4.5.3 под Линукс). Файл и номер "предупреждаемой" строки в файле есть, английское название предупреждения есть, номера нету.
Записан
mutineer
Гость
« Ответ #3 : Июнь 22, 2012, 14:37 »

хм, действительно... Значит что-то перепутал
Записан
Fat-Zer
Гость
« Ответ #4 : Июнь 22, 2012, 15:13 »

что за "номер предупреждения"? таких не знаю...
предупреждения задаются опциями компилятора. для unused variable: -Wno-unused-variable.
остальные смотреть в man gcc.
Записан
Odyssey
Гость
« Ответ #5 : Июнь 25, 2012, 14:44 »

Вот как это было сделано в книге Саттера/Александреску. Как видите, здесь требуются номера предупреждений (чем еще могут быть "4512" и "4180"?)...

#pragma warning(push) //Отключение предупреждений только для данного заголовочного файла
#pragma warning(disable:4512)
#pragma warning(disable:4180)
#include "lib.h" //Исходная, "обертываемая" библиотека
#pragma warning(pop) //Восстанавливаем исходный уровень вывода предупреждений
Записан
Fat-Zer
Гость
« Ответ #6 : Июнь 25, 2012, 17:56 »

все #pragma реализуются на усмотрение компилятора.
Саттера точно не про gcc писал...
gcc делает так.
Записан
Odyssey
Гость
« Ответ #7 : Июнь 26, 2012, 10:50 »

Спасибо!
К сожалению, позже выяснилась непонятная вещь: мой компилятор игнорирует #pragma. То есть и те инструкции, которые давал Саттер, и инструкции по приведенной вами ссылке - компилятор выдает дополнительные предупреждения "ignoring #pragma".
Возможно, следует что-нибудь прописать в pro-файл (слабо знаком с собственно компилятором)?
(Вроде, стандартная сборка Qt 4.5.3, компилятор linux-g++)
Записан
Fat-Zer
Гость
« Ответ #8 : Июнь 26, 2012, 21:38 »

версия gcc какая? эти прагмы появились в ветке 4.2....
Записан
Odyssey
Гость
« Ответ #9 : Июнь 27, 2012, 08:05 »

Да, видимо, проблема в этом - у меня версия 3.3.6.
Значит, на этой версии провернуть трюк со временным отключением избранных предупреждений не получится? Может, есть какой-то другой инструмент для этой версии, пусть более грубый, отключающий/включающий, например, вообще все предупреждения?
Записан
Fat-Zer
Гость
« Ответ #10 : Июнь 27, 2012, 15:38 »

вылезать из криокамеры пора... или по работе стоит МСВС какой-нить?

а так можно только на уровне файлов настраивая систему сборки, чтобы каждый файл со своими предупреждениями собирался... в cmake и autotools такое точно возможно... с qmake - вряд ли...
Записан
Odyssey
Гость
« Ответ #11 : Июнь 27, 2012, 15:58 »

Вылез бы, да только он-с самый-с...
Всё ясно, придется 200 ворнингов терпеть... Ы...
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Июнь 27, 2012, 16:07 »

Вылез бы, да только он-с самый-с...
Всё ясно, придется 200 ворнингов терпеть... Ы...
Кто самый? MSVC понимает эти прагмы отлично (даже древняя шестерка).
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #13 : Июнь 27, 2012, 17:04 »

Кто самый? MSVC понимает эти прагмы отлично (даже древняя шестерка).
МСВС MSVC'у рознь.
Записан
Fat-Zer
Гость
« Ответ #14 : Июнь 27, 2012, 18:52 »

а поправить то по поводу чего предупреждает ни как?
единственный ворнинг, который у меня не получилось исправить - это на си unused-parameter. на плюсах правится комментированием параметра...

ещё можно самому собрать свежачок, если разрешат... с людьми говорил - им обычно только ядро трогать запрещено, а в юзерспейсе копаться - сколько душе угодно...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.11 секунд. Запросов: 23.