Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > How to issue a #warning?


Автор: marcusmae 24.2.2008, 23:57
Всем привет,

Понадобилось поставить в коде парочку ворнингов, чтобы собственные опасные недоделки всякий раз мозолили глаза. Но #warning нет. А #error есть. Как же поставить ворнинг?

Автор: jonie 25.2.2008, 04:05
попробуйте писать например
//TODO 
//HACKME
//REMOVEME
и т.п.)
а в VS.net warning был ...
опция /warning:string
ну и, конечно, #pragma warning

......

так что уточните компилятор, как минимум.

Автор: marcusmae 25.2.2008, 04:39
Ах, да, компилятор - Visual Studio 2005 C++ без \clr. Ну вот // TODO я, наверно, не буду пользоваться, поскольку есть хотя бы #pragma deprecated. Но отсутствие ворнинга озадачивает. Или я его не нашел..?

Добавлено через 2 минуты и 29 секунд
#pragma warning видел, и он немного другую задачу решает, как я понял.

Автор: Mayk 25.2.2008, 05:57
Попробуй ещё #warn [не знаю откуда это, но vim его подсвечивает].
А также посмотри в сторону boost.static_warning

Автор: Fazil6 25.2.2008, 10:15
Код

#pragma message( "Warning!!! Hellow World!!!!" )

Автор: jonie 25.2.2008, 14:12
Цитата

#pragma warning видел, и он немного другую задачу решает, как я понял.
по мне так как раз мозолит глаза)

Автор: marcusmae 25.2.2008, 14:55
Цитата(jonie @  25.2.2008,  14:12 Найти цитируемый пост)
по мне так как раз мозолит глаза


jonie, #pragma warning управляет показом существующих ворнингов, он не предназначен для их производства, в то время как с помощью #error действительно можно выдать свою ошибку.

Цитата(Mayk @  25.2.2008,  05:57 Найти цитируемый пост)
Попробуй ещё #warn

Неа, не берёт

Код

#pragma message( "Warning!!! Hellow World!!!!" )

Да, у меня сейчас так и сделано. Но только это будет в Output бросаться мимо списка сообщений компилятора.

А как работает http://www.boost.org/boost/static_warning.hpp? У него должен быть bool в аргументе? В документации описан лишь http://www.boost.org/doc/html/boost_staticassert.html.

Автор: Mayk 25.2.2008, 16:50
Цитата(marcusmae @  25.2.2008,  18:55 Найти цитируемый пост)

А как работает BOOST_STATIC_WARNING()? У него должен быть bool в аргументе? В документации описан лишь BOOST_STATIC_ASSERT(). 

Ага. Хотя бы такой:
Код

BOOST_STATIC_WARNING(!"hello world");

правда чо-та он сообщения не очень удобочитаемые по сравнинею с #warning'ом. 
Но если совсем скучно, то можно взять идею static warning за основу и написать что-нить выводящее. Хотя бы так:
Код

#define MSG(Y)\
struct x{\
    void f(){\
        int Y=0;\
        int X = Y/0;\
    }\
};


int main(){
    MSG(HELLO_WORLD);
}19:49:dvl:~$ g++ a.cpp


Цитата

a.cpp: In member function ‘void main()::x::f()’:
a.cpp:11: warning: division by zero in ‘HELLO_WORLD / 0’

Автор: jonie 25.2.2008, 18:23
признаю, затупил. #pragma warning тут не поможет


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)