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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Кроссплатформенные пользовательские warning (gcc, msvs)  (Прочитано 10859 раз)
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« : Сентябрь 08, 2010, 15:54 »

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

К сожалению нет стандартного способа генерить такие ворнинги из кода, у каждого компилятора это делается по своему. В Qt и Boost также нет такой функциональности. Так что я сделал свой вариант.

Пример использования:
Код
C++ (Qt)
...
WARNING( Blah-blah ololo )
 
...
void some_unfinished_func()
{
   REALIZATION_NEEDED;
}
 

Исходник:
Код
C++ (Qt)
#pragma once
 
/*! Crossplatform compiler warning message */
 
/*! Compiler warning message.
 
Using:
 
WARNING(blah-blah)
 
void some_unfinished_func()
{
   REALIZATION_NEEDED;
}
 
*/

 
#define WARNING(msg) __PRAGMA(message (__LOC__#msg))
 
#define NEED_TO_DELETE WARNING(Need to delete)
#define REALIZATION_NEEDED WARNING(Realization needed)
 
////////////////////////////////////////////////////////////////////////////////
// details
 
#ifdef _MSC_VER
#define __PRAGMA(str) __pragma(str)
#define __STR2__(x) #x
#define __STR1__(x) __STR2__(x)
#define __LOC__ __FILE__ "(" __STR1__( __LINE__ ) ") : warning: "
#else
#define __PRAGMA(str) _Pragma(#str)
#define __LOC__
#endif
 
Записан

Гугль в помощь
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Сентябрь 08, 2010, 20:03 »

эм а как же #warning ? его что, в msvc нету?
Записан
Denjs
Гость
« Ответ #2 : Сентябрь 08, 2010, 23:00 »

эээээ....
Код:
qDebug() << message;
qWarning() << "mySeperClass::myMegaMethod()[00232]:: WTH!? ";
qFatal("divide: cannot divide by zero");
?
Есть ещё Q_ASSERT(), Q_ASSERT_X(),  Q_CHECK_PTR() ...
неа?

или вы говорите про кучку сообщений на этапе сборки? аналог списка TODO?!
а они не потеряются в куче сообщений которые вываливает компилятор?

расскажите подробнее сценарий применения - после того, как я внес в исходник
Код:
WARNING( Blah-blah ololo )
где ваша ворнинги потом искать, когда и где они "проявлятся"?
« Последнее редактирование: Сентябрь 08, 2010, 23:43 от Denjs » Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #3 : Сентябрь 08, 2010, 23:29 »

Цитировать
эээээ....
Код:
qDebug() << message;
qWarning() << "mySeperClass::myMegaMethod()[00232]:: WTH!? "
?
Есть ещё Q_ASSERT(), Q_ASSERT_X(),  Q_CHECK_PTR() ...
неа?
неа, это к ворнингам компилятора отношения не имеет.

Цитировать
или вы говорите про кучку сообщений на этапе сборки? аналог списка TODO?!
точно! как я и писал выше, может использоваться в качестве TODO для себя или для других.

Цитировать
а они не потеряются в куче сообщений которые вываливает компилятор?
нормальная среда подсвечивает ворнинги, так что это не проблема.

Цитировать
эм а как же #warning ? его что, в msvc нету?
http://stackoverflow.com/questions/1046821/why-does-not-visual-studio-display-warnings-generated-by-the-warning-directive
http://support.microsoft.com/kb/155196

Записан

Гугль в помощь
Denjs
Гость
« Ответ #4 : Сентябрь 08, 2010, 23:43 »

И ещё мне кажется ваш код заточен чисто под MS VS ?
это так? на mingw и gcc он не пойдет?
"#pragma once" - разве вместо этого в QT не конструкции "#ifndef / #define / #endif" используются?

Цитировать
Цитировать
или вы говорите про кучку сообщений на этапе сборки? аналог списка TODO?!
точно! как я и писал выше, может использоваться в качестве TODO для себя или для других.
т.е. это ваш способ генерировать Compile-Time сообщения?
в отличии от run-time сообщений qWarning() qDebug() и иже с ними? гм.. ок...

(вы уж извините, но я люблю точно и 3 раза убедиться))))
Цитировать
Цитировать
а они не потеряются в куче сообщений которые вываливает компилятор?
нормальная среда подсвечивает ворнинги, так что это не проблема.
нормальная среда и списки TODO поодерживает, и в идеале - достаточно написать в коде вещь типа
Код:
//TODO: my todo message
что бы появилась ещё одна todo-шка в списке прямо в среде. вот кажись эклипс именно так и делает...
.. но не суть) это я так.. к слову...
« Последнее редактирование: Сентябрь 08, 2010, 23:50 от Denjs » Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #5 : Сентябрь 08, 2010, 23:48 »

И ещё мне кажется ваш код заточен чисто под MS VS ?
это так? на mingw и gcc он не пойдет?
"#pragma once" - разве вместо этого в QT не конструкции "#ifndef / #define / #endif" используются?
gcc отлично отрабатывает #pragma once, моя основная среда - это как раз gcc.

А #ifndef / #define / #endif это, имхо, геморрой..

Хотя да, согласен что это не стандарт и, возможно, найдется такой компилятор, который это не сожрет.
Записан

Гугль в помощь
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #6 : Сентябрь 09, 2010, 00:00 »

Цитировать
нормальная среда и списки TODO поодерживает, и в идеале - достаточно написать в коде вещь типа
Ваши бы слова да разрабам MSVS  в уши ) Отменное гов..eцо этот MSVS я б сказал...
Записан

Гугль в помощь
Blackwanderer
Гость
« Ответ #7 : Сентябрь 09, 2010, 07:33 »

Цитировать
нормальная среда и списки TODO поодерживает, и в идеале - достаточно написать в коде вещь типа
Ваши бы слова да разрабам MSVS  в уши ) Отменное гов..eцо этот MSVS я б сказал...
В MSVS 2010 реализовано. Вроде даже по дефолту.
Записан
Sahab
Гость
« Ответ #8 : Сентябрь 09, 2010, 08:50 »

Код:
Ваши бы слова да разрабам MSVS  в уши ) Отменное гов..eцо этот MSVS я б сказал...
а что лучше?
vim/Emacs?))))
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #9 : Сентябрь 09, 2010, 09:59 »

Код:
Ваши бы слова да разрабам MSVS  в уши ) Отменное гов..eцо этот MSVS я б сказал...
а что лучше?
vim/Emacs?))))
Да что угодно: kdevelop, netbeans, qtcreator...
Записан

Гугль в помощь
SASA
Гость
« Ответ #10 : Сентябрь 09, 2010, 14:22 »

Не по теме.
Отменное гов..eцо этот MSVS я б сказал...
Так богохульствовать... был бы век 15, давно бы на костре изжарился, неверный!!! Смеющийся

По теме. Вещь полезная.
А Вы уверены, что
Код:
 #define __PRAGMA(str) _Pragma(#str) 
пройдёт для всех компиляторов.
« Последнее редактирование: Сентябрь 09, 2010, 14:28 от SASA » Записан
Sahab
Гость
« Ответ #11 : Сентябрь 09, 2010, 15:26 »

Код:
Да что угодно: kdevelop, netbeans, qtcreator...
не смешите...
Записан
Sahab
Гость
« Ответ #12 : Сентябрь 09, 2010, 15:29 »

kdevelop под венду жесть,
netbeans тормозной(немного Веселый) + жаба...,
qtcreator уже поинтересней... развивается конечно побыстрому, много новых фич... но если быть честным... не дотягивает до студии
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #13 : Сентябрь 09, 2010, 16:10 »

Цитировать
А Вы уверены, что
Код:
 #define __PRAGMA(str) _Pragma(#str) 
пройдёт для всех компиляторов.

_Pragma описана в стандарте C++, однако мелкомягкие как всегда положили на стандарт и изобрели свою __pragma =)

Цитировать
kdevelop под венду жесть,
netbeans тормозной(немного ) + жаба...,
qtcreator уже поинтересней... развивается конечно побыстрому, много новых фич... но если быть честным... не дотягивает до студии
Я использую netbeans под линуксом, я доволен, все что нужно в нем есть и работает отлично, а тормоза на моем AthlonX4 мне не заметны.

kdevelop под линуксом очень даже ничего, особенно в плане разработки под Qt, дополняет имена сигналов, реализует методы и тд. и тп., работает при этом очень шустро.

qtcreator простенькая детская среда, но многое в ней есть, за что - зачот Улыбающийся

А студия (без дополнительных ассистентов) это УГ, да плюс еще компилятор с кучей несоотвествий со стандартом, ну и компилит в пи раз медленнее чем gcc под линуксом на одной и той же машине. Единственный плюс студии - это нормально работающий отладчик.
Записан

Гугль в помощь
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #14 : Сентябрь 09, 2010, 16:23 »

вы забыли одну маленькую вещь - msvc генерит в 500раз лучший код, чем mingw (по размеру и скорости), потому и работает медленней.
Ну по крайней мере в он не делает таких конструкций (в отличие от мингвы):
Код:
CPU Disasm
Address   Hex dump          Command                                          Comments
004013F1  |. /EB 01         JMP     SHORT 004013F4
004013F3  |  |90            NOP
004013F4  |> \55            PUSH    EBP
или
Код:
CPU Disasm
Address   Hex dump          Command                                          Comments
004012D0  /.  55            PUSH    EBP
004012D1  |.  8B0D 0CFF4400 MOV     ECX,DWORD PTR DS:[<&msvcrt._onexit>]
004012D7  |.  89E5          MOV     EBP,ESP
004012D9  |.  5D            POP     EBP
« Последнее редактирование: Сентябрь 09, 2010, 16:26 от Авварон » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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