Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Odyssey от Июнь 22, 2012, 14:12



Название: Отключение избранных предупреждений директивами компилятора
Отправлено: 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) //Восстанавливаем исходный уровень вывода предупреждений


Название: Re: Отключение избранных предупреждений директивами компилятора
Отправлено: mutineer от Июнь 22, 2012, 14:24
Номер предупреждения видно же в выхлопе компилятора


Название: Re: Отключение избранных предупреждений директивами компилятора
Отправлено: Odyssey от Июнь 22, 2012, 14:34
Да вот - смотрел в окне Compile Output и не нашел :(  (Qt Creator для Qt 4.5.3 под Линукс). Файл и номер "предупреждаемой" строки в файле есть, английское название предупреждения есть, номера нету.


Название: Re: Отключение избранных предупреждений директивами компилятора
Отправлено: mutineer от Июнь 22, 2012, 14:37
хм, действительно... Значит что-то перепутал


Название: Re: Отключение избранных предупреждений директивами компилятора
Отправлено: Fat-Zer от Июнь 22, 2012, 15:13
что за "номер предупреждения"? таких не знаю...
предупреждения задаются опциями компилятора. для unused variable: -Wno-unused-variable.
остальные смотреть в man gcc.


Название: Re: Отключение избранных предупреждений директивами компилятора
Отправлено: Odyssey от Июнь 25, 2012, 14:44
Вот как это было сделано в книге Саттера/Александреску. Как видите, здесь требуются номера предупреждений (чем еще могут быть "4512" и "4180"?)...

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


Название: Re: Отключение избранных предупреждений директивами компилятора
Отправлено: Fat-Zer от Июнь 25, 2012, 17:56
все #pragma реализуются на усмотрение компилятора.
Саттера точно не про gcc писал...
gcc делает так (http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html).


Название: Re: Отключение избранных предупреждений директивами компилятора
Отправлено: Odyssey от Июнь 26, 2012, 10:50
Спасибо!
К сожалению, позже выяснилась непонятная вещь: мой компилятор игнорирует #pragma. То есть и те инструкции, которые давал Саттер, и инструкции по приведенной вами ссылке - компилятор выдает дополнительные предупреждения "ignoring #pragma".
Возможно, следует что-нибудь прописать в pro-файл (слабо знаком с собственно компилятором)?
(Вроде, стандартная сборка Qt 4.5.3, компилятор linux-g++)


Название: Re: Отключение избранных предупреждений директивами компилятора
Отправлено: Fat-Zer от Июнь 26, 2012, 21:38
версия gcc какая? эти прагмы появились в ветке 4.2....


Название: Re: Отключение избранных предупреждений директивами компилятора
Отправлено: Odyssey от Июнь 27, 2012, 08:05
Да, видимо, проблема в этом - у меня версия 3.3.6.
Значит, на этой версии провернуть трюк со временным отключением избранных предупреждений не получится? Может, есть какой-то другой инструмент для этой версии, пусть более грубый, отключающий/включающий, например, вообще все предупреждения?


Название: Re: Отключение избранных предупреждений директивами компилятора
Отправлено: Fat-Zer от Июнь 27, 2012, 15:38
вылезать из криокамеры пора... или по работе стоит МСВС какой-нить?

а так можно только на уровне файлов настраивая систему сборки, чтобы каждый файл со своими предупреждениями собирался... в cmake и autotools такое точно возможно... с qmake - вряд ли...


Название: Re: Отключение избранных предупреждений директивами компилятора
Отправлено: Odyssey от Июнь 27, 2012, 15:58
Вылез бы, да только он-с самый-с...
Всё ясно, придется 200 ворнингов терпеть... Ы...


Название: Re: Отключение избранных предупреждений директивами компилятора
Отправлено: Igors от Июнь 27, 2012, 16:07
Вылез бы, да только он-с самый-с...
Всё ясно, придется 200 ворнингов терпеть... Ы...
Кто самый? MSVC понимает эти прагмы отлично (даже древняя шестерка).


Название: Re: Отключение избранных предупреждений директивами компилятора
Отправлено: LisandreL от Июнь 27, 2012, 17:04
Кто самый? MSVC понимает эти прагмы отлично (даже древняя шестерка).
МСВС (http://ru.wikipedia.org/wiki/МСВС) MSVC'у рознь.


Название: Re: Отключение избранных предупреждений директивами компилятора
Отправлено: Fat-Zer от Июнь 27, 2012, 18:52
а поправить то по поводу чего предупреждает ни как?
единственный ворнинг, который у меня не получилось исправить - это на си unused-parameter. на плюсах правится комментированием параметра...

ещё можно самому собрать свежачок, если разрешат... с людьми говорил - им обычно только ядро трогать запрещено, а в юзерспейсе копаться - сколько душе угодно...