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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Как избавиться от WRNING`ов при компиляции приложения  (Прочитано 9514 раз)
Martiro
Гость
« : Октябрь 08, 2008, 15:05 »

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

Как от этого избавиться?
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #1 : Октябрь 08, 2008, 16:34 »

если используете gcc
то нужно добавить к нему ключ
Код:
-Wno-unused 
еще есть ключи
Код:
-Wno-sign-compare -Wno-comment 

остальные в man gcc
Записан
SASA
Гость
« Ответ #2 : Октябрь 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
Записан
ритт
Гость
« Ответ #3 : Октябрь 08, 2008, 18:31 »

гг...ну, да...
для "
QT 3.3.3
OS - MCBC (*nix)
" это очень поможет Улыбающийся
Записан
sergey_ulyanov
Гость
« Ответ #4 : Октябрь 08, 2008, 23:02 »

Q_UNUSED ?
(если не лень писать для каждой переменной)
Записан
TukiNov
Гость
« Ответ #5 : Октябрь 08, 2008, 23:04 »

CONFIG += warn_off
В файле *.pro
Записан
Tonal
Гость
« Ответ #6 : Октябрь 09, 2008, 07:39 »

Отключать для всего варнинги - это совсем плохо.
Если действительно нужно, то лучше отключить для какого-то отдельного файла.
Например сделать специальный icon.cpp в который включить icon.h. И для него уже и отрубать.
Записан
SASA
Гость
« Ответ #7 : Октябрь 09, 2008, 11:11 »

Цитировать
гг...ну, да...
для "
QT 3.3.3
OS - MCBC (*nix)
" это очень поможет  Улыбающийся
Я догадывался… Плачущий
А нет ли, чисто случайно, подобных вещей в gcc?
Записан
Alex03
Гость
« Ответ #8 : Октябрь 09, 2008, 18:43 »

Дело в том, что в приложении используются иконки xpm, которые хранятся в файле icon.h. Какждый раз, когда компилится приложение, на экране все эти иконки (получается, что переменные) выделяеются как неиспользуемые переменные:
Приведите пример файла...
Сдаётся мне что Вам надо перенести их в icon.cpp.
Записан
Martiro
Гость
« Ответ #9 : Октябрь 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?
Записан
Alex03
Гость
« Ответ #10 : Октябрь 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?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #11 : Октябрь 10, 2008, 11:21 »

Вот и получается что инклудите Вы этот файл например в 10 cpp-шников и получаете в бинарнике по 10 копий одних и тех же данных.

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

Код:
#ifndef DBWICON_H
#define DBWICON_H

...

#endif

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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #12 : Октябрь 10, 2008, 11:32 »

Аналогичным образом использую иконки, все ок (Windows, Linux)

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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
denka
Гость
« Ответ #13 : Октябрь 10, 2008, 13:51 »

Вот и получается что инклудите Вы этот файл например в 10 cpp-шников и получаете в бинарнике по 10 копий одних и тех же данных.

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

Код:
#ifndef DBWICON_H
#define DBWICON_H

...

#endif

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

Немного не так. Да контсрукция #ifdef..#endif защишает от повторного включения кода в единице компиляции. Но так как в С и С++ единицей компиляции являеться файл, то как сказал Alex03, будут ситуации когда компилятор будет ругаться на не используемые переменные. Martiro объявляет массив как статический, тем самым ограничивая область видимости данной переменной текушем файлом. Поэтому после компиляции в отдельных файлах мы имеем разные объекты и если к ним нет обращения в файле мы получаем не используемые переменные и как следствие варнинги Улыбающийся
Так что как уже сказал Alex03, нужно использовать extern. Кстати и static надо убрать.
« Последнее редактирование: Октябрь 10, 2008, 13:56 от den'ka » Записан
Martiro
Гость
« Ответ #14 : Октябрь 10, 2008, 14:39 »

Спасибо всем за ценные советы!
А варнинги действительно повторяются столько же раз, сколько было подключений icon.h.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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