Russian Qt Forum

Qt => Общие вопросы => Тема начата: Martiro от Октябрь 08, 2008, 15:05



Название: Как избавиться от WRNING`ов при компиляции приложения
Отправлено: Martiro от Октябрь 08, 2008, 15:05
Вопросом следующий...
Как избавиться от назойливых WARNING`ов при компиляции приложения. Дело в том, что в приложении используются иконки xpm, которые хранятся в файле icon.h. Какждый раз, когда компилится приложение, на экране все эти иконки (получается, что переменные) выделяеются как неиспользуемые переменные:
Код:
...
class/icon.h:1063: warning: `const char * fit_to_page[23]' defined but not used
...
и т.д.

Как от этого избавиться?


Название: Re: Как избавиться от WRNING`ов при компиляции приложения
Отправлено: Admin от Октябрь 08, 2008, 16:34
если используете gcc
то нужно добавить к нему ключ
Код:
-Wno-unused 
еще есть ключи
Код:
-Wno-sign-compare -Wno-comment 

остальные в man gcc


Название: Re: Как избавиться от WRNING`ов при компиляции приложения
Отправлено: SASA от Октябрь 08, 2008, 17:48
Чтоб не отключать все варнинги, можно попробывать что-то вроде этого.
Код:
double j = 5.4;
int i = 5;
#pragma warning(disable: 4553)
i == j;
#pragma warning(default: 4553)
i == j;
Компилятор выдаёт только 1 варнинг.

P.S. VS2005


Название: Re: Как избавиться от WRNING`ов при компиляции приложения
Отправлено: ритт от Октябрь 08, 2008, 18:31
гг...ну, да...
для "
QT 3.3.3
OS - MCBC (*nix)
" это очень поможет :)


Название: Re: Как избавиться от WRNING`ов при компиляции приложения
Отправлено: sergey_ulyanov от Октябрь 08, 2008, 23:02
Q_UNUSED ?
(если не лень писать для каждой переменной)


Название: Re: Как избавиться от WRNING`ов при компиляции приложения
Отправлено: TukiNov от Октябрь 08, 2008, 23:04
CONFIG += warn_off
В файле *.pro


Название: Re: Как избавиться от WRNING`ов при компиляции приложения
Отправлено: Tonal от Октябрь 09, 2008, 07:39
Отключать для всего варнинги - это совсем плохо.
Если действительно нужно, то лучше отключить для какого-то отдельного файла.
Например сделать специальный icon.cpp в который включить icon.h. И для него уже и отрубать.


Название: Re: Как избавиться от WRNING`ов при компиляции приложения
Отправлено: SASA от Октябрь 09, 2008, 11:11
Цитировать
гг...ну, да...
для "
QT 3.3.3
OS - MCBC (*nix)
" это очень поможет  :)
Я догадывался… :'(
А нет ли, чисто случайно, подобных вещей в gcc?


Название: Re: Как избавиться от WRNING`ов при компиляции приложения
Отправлено: Alex03 от Октябрь 09, 2008, 18:43
Дело в том, что в приложении используются иконки xpm, которые хранятся в файле icon.h. Какждый раз, когда компилится приложение, на экране все эти иконки (получается, что переменные) выделяеются как неиспользуемые переменные:
Приведите пример файла...
Сдаётся мне что Вам надо перенести их в icon.cpp.


Название: Re: Как избавиться от WRNING`ов при компиляции приложения
Отправлено: Martiro от Октябрь 10, 2008, 07:45
Ну, вот пример, файл icon.h:
Код:
#ifndef DBWICON_H
#define DBWICON_H



static const char * icon_prior_xpm[] = {
"20 20 3 1",
" c None",
". c None",
"+ c #233233",
"....................",
"....................",
"...........++.......",
"..........+++.......",
".........++++.......",
"........+++++.......",
".......++++++.......",
"......+++++++.......",
".....++++++++.......",
"....+++++++++.......",
".....++++++++.......",
"......+++++++.......",
".......++++++.......",
"........+++++.......",
".........++++.......",
"..........+++.......",
"...........++.......",
"....................",
"....................",
"...................."};

static const char * icon_first_xpm[] = {
"20 20 3 1",
" c None",
". c None",
"+ c #233233",
"....................",
"....................",
"........++......++..",
".......+++.....+++..",
"......++++....++++..",
".....+++++...+++++..",
"....++++++..++++++..",
"...+++++++.+++++++..",
"..++++++++++++++++..",
".+++++++++++++++++..",
"..++++++++++++++++..",
"...+++++++.+++++++..",
"....++++++..++++++..",
".....+++++...+++++..",
"......++++....++++..",
".......+++.....+++..",
"........++......++..",
"....................",
"....................",
"...................."};

static const char * icon_next_xpm[] = {
"20 20 3 1",
" c None",
". c None",
"+ c #233233",
"....................",
"....................",
".......++...........",
".......+++..........",
".......++++.........",
".......+++++........",
".......++++++.......",
".......+++++++......",
".......++++++++.....",
".......+++++++++....",
".......++++++++.....",
".......+++++++......",
".......++++++.......",
".......+++++........",
".......++++.........",
".......+++..........",
".......++...........",
"....................",
"....................",
"...................."};

static const char * icon_last_xpm[] = {
"20 20 3 1",
" c None",
". c None",
"+ c #233233",
"....................",
"....................",
"..++......++........",
"..+++.....+++.......",
"..++++....++++......",
"..+++++...+++++.....",
"..++++++..++++++....",
"..+++++++.+++++++...",
"..++++++++++++++++..",
"..+++++++++++++++++.",
"..++++++++++++++++..",
"..+++++++.+++++++...",
"..++++++..++++++....",
"..+++++...+++++.....",
"..++++....++++......",
"..+++.....+++.......",
"..++......++........",
"....................",
"....................",
"...................."};

static const char * icon_append_xpm[] = {
"20 20 3 1",
" c None",
". c None",
"+ c #233233",
"....................",
"....................",
"....................",
"....................",
"........++++........",
"........++++........",
"........++++........",
"........++++........",
"....++++++++++++....",
"....++++++++++++....",
"....++++++++++++....",
"....++++++++++++....",
"........++++........",
"........++++........",
"........++++........",
"........++++........",
"....................",
"....................",
"....................",
"...................."};

static const char * icon_deleterec_xpm[] = {
"20 20 3 1",
" c None",
". c None",
"+ c #233233",
"....................",
"....................",
"....................",
"....................",
"....................",
"....................",
"....................",
"....................",
"....++++++++++++....",
"....++++++++++++....",
"....++++++++++++....",
"....++++++++++++....",
"....................",
"....................",
"....................",
"....................",
"....................",
"....................",
"....................",
"...................."};

static const char * icon_post_xpm[] = {
"20 20 3 1",
" c None",
". c None",
"+ c #233233",
"....................",
"....................",
"....................",
"....................",
"....................",
"....................",
"..................++.",
"............... ++++",
"...............++++.",
"..............++++..",
"...++........++++...",
"..++++......++++....",
"...++++....++++.....",
"....++++..++++......",
".....++++++++.......",
"......++++++........",
".......++++........",
"........++..........",
"....................",
"...................."};


static const char * icon_rollback_xpm[] = {
"20 20 3 1",
" c None",
". c None",
"+ c #282742",
"....................",
"....................",
".........++++.......",
"........++++++......",
".......++++++++.....",
"......++++..++++....",
"......+++....++++...",
".....++++.....++++..",
".....+++.......+++..",
"....++++........++..",
"....+++.............",
"...++++.............",
"...+++..............",
".+++++++............",
"..+++++.............",
"...+++..............",
"....+...............",
"....................",
"....................",
"...................."};


static const char * icon_helpdb_xpm[] = {
"20 20 6 1",
" c None",
". c None",
"+ c #000000",
"@ c #00FFFF",
"# c #008080",
"$ c #808080",
"....................",
"....................",
".......++++++.......",
"......+@@@@@@+......",
".....+@@#++##@+.....",
".....+@#+$$+@#+$....",
"......++$$.+@#+$....",
".......$$.+@#+$$....",
".........+@#+$$.....",
"........+@#+$$......",
"........+@#+$.......",
"........+@#+$.......",
"........+@#+$.......",
".........++$$.......",
".........$$$........",
".........++.........",
"........+@#+$.......",
".........++$$.......",
".........$$$........",
"...................."};

Естественно не полностью, но там кроме иконок больше ничего нет.
Тогда встает еще один вопрос. Чего именно будет достаточно прописать в icon.cpp?


Название: Re: Как избавиться от WRNING`ов при компиляции приложения
Отправлено: Alex03 от Октябрь 10, 2008, 08:45
Вот и получается что инклудите Вы этот файл например в 10 cpp-шников и получаете в бинарнике по 10 копий одних и тех же данных. Ну и плюс в каждом cpp-шнике получаете варнинги за неиспользуемые переменные.

Перенесите всё в icons.cpp (без static), а в icons.h оставте только:
extern const char * icon_prior_xpm[];
extern const char * icon_first_xpm[];
...

PS А при чём тут Qt?


Название: Re: Как избавиться от WRNING`ов при компиляции приложения
Отправлено: pastor от Октябрь 10, 2008, 11:21
Вот и получается что инклудите Вы этот файл например в 10 cpp-шников и получаете в бинарнике по 10 копий одних и тех же данных.

Боюсь я с вами не соглашусь по этому поводу, т.к. он использует "стражы включения" (include guards):

Код:
#ifndef DBWICON_H
#define DBWICON_H

...

#endif

"стражы включения" исключают повторное включение кода в единице компиляции.


Название: Re: Как избавиться от WRNING`ов при компиляции приложения
Отправлено: pastor от Октябрь 10, 2008, 11:32
Аналогичным образом использую иконки, все ок (Windows, Linux)

имхо, проблема связана со старой версией GCC в MCBC


Название: Re: Как избавиться от WRNING`ов при компиляции приложения
Отправлено: denka от Октябрь 10, 2008, 13:51
Вот и получается что инклудите Вы этот файл например в 10 cpp-шников и получаете в бинарнике по 10 копий одних и тех же данных.

Боюсь я с вами не соглашусь по этому поводу, т.к. он использует "стражы включения" (include guards):

Код:
#ifndef DBWICON_H
#define DBWICON_H

...

#endif

"стражы включения" исключают повторное включение кода в единице компиляции.

Немного не так. Да контсрукция #ifdef..#endif защишает от повторного включения кода в единице компиляции. Но так как в С и С++ единицей компиляции являеться файл, то как сказал Alex03, будут ситуации когда компилятор будет ругаться на не используемые переменные. Martiro объявляет массив как статический, тем самым ограничивая область видимости данной переменной текушем файлом. Поэтому после компиляции в отдельных файлах мы имеем разные объекты и если к ним нет обращения в файле мы получаем не используемые переменные и как следствие варнинги :)
Так что как уже сказал Alex03, нужно использовать extern. Кстати и static надо убрать.


Название: Re: Как избавиться от WRNING`ов при компиляции приложения
Отправлено: Martiro от Октябрь 10, 2008, 14:39
Спасибо всем за ценные советы!
А варнинги действительно повторяются столько же раз, сколько было подключений icon.h.


Название: Re: Как избавиться от WRNING`ов при компиляции приложения
Отправлено: Alex Custov от Октябрь 14, 2008, 01:42

Боюсь я с вами не соглашусь по этому поводу, т.к. он использует "стражы включения" (include guards):

Код:
#ifndef DBWICON_H
#define DBWICON_H

...

#endif

"стражы включения" исключают повторное включение кода в единице компиляции.

Если бинарник собирается из 10 файлов-исходников, и каждый их них включает в себя icon.h (хранящий, скажем одну static иконку), то в бинарнике получится 10 иконок.

Кстати, gcc выбрасывает неиспользуемые static данные, и варнингов не выдаёт (у меня 4.1.3). Если наши 10 tu не используют подключаемую иконку, то в бинарнике не будет ни одной иконки.