Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > GNU toolchain > [minGW] отключить warning ИЗ КОДА


Автор: borisbn 10.4.2012, 17:26
Здравствуйте.
У меня есть исходник, который я собираюсь компилировать как в MSVC, так и в MinGW.
Код

bool addCounter( char *   szObjectName
   , char *   szInstanceName
   , char *   szCounterName
   )
{
...
    PDH_COUNTER_PATH_ELEMENTS_A pe;
    pe.szMachineName     = 0;
    pe.szObjectName      = szObjectName;      // объявлена как LPTSTR... без const
    pe.szInstanceName    = szInstanceName;
//и т. д.
}

bool res = addCounter( "Processor", "proc.exe", "Usage", ...  и т.д.

т.к. эти CENSORED мелкомягкие не сделали в своих API-шных структурах const-указатели, то и я не могу передавать в функцию const char *.
При этом студия на такой код не ругается, а MinGW - справедливо орёт на меня))
Вопрос: как во-первых узнать, что сейчас мы компилируемся MinGW, а во-вторых как отключить warning -Wwrite-strings в коде (не в настройках проекта) ?
Дело в том, что я хочу, чтобы мне выдавался такой warning, но не в этом месте.

Спасибо.

Автор: boostcoder 10.4.2012, 17:35
Цитата(borisbn @  10.4.2012,  17:26 Найти цитируемый пост)
как во-первых узнать, что сейчас мы компилируемся MinGW

Код

#ifdef __MINGW32__
   ...
#endif // __MINGW32__

хотя не уверен что тебе нужно именно мингв. возможно более универсальным решением будет __GCC__ ?

Цитата(borisbn @  10.4.2012,  17:26 Найти цитируемый пост)
как отключить warning -Wwrite-strings в коде (не в настройках проекта) ?

говорят что так: http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html
не проверял smile

Автор: borisbn 10.4.2012, 17:53
boostcoder, чего-то даже проверка на MINGW/GCC не работает
http://liveworkspace.org/code/1b15425b257711e3e6cbf310c3be438b

Автор: boostcoder 10.4.2012, 17:57
упс, должно быть __GNUC__ или __GNUG__
опшипся smile

http://liveworkspace.org/code/f637754cb473dc0ea6c68311903e87ed

Добавлено через 1 минуту и 2 секунды
__GNUC__ - gcc C-mode
__GNUG__ - gcc C++-mode

Добавлено через 2 минуты и 12 секунд
вот предефайненые макросы gcc: http://docs.freebsd.org/info/cpp/cpp.info.Standard_Predefined.html

Автор: borisbn 10.4.2012, 18:04
о_О. Всё. Разобрался. Не 
Цитата(boostcoder @  10.4.2012,  17:35 Найти цитируемый пост)
универсальным решением будет __GCC__

а __GNUC__ 

И диагностик-прагмы работают. Пока только на LWS проверил. Завтра на MinGW проверю.

Спасибо.

Добавлено через 1 минуту и 24 секунды
Блин. Опять опоздал))
Цитата(boostcoder @  10.4.2012,  17:57 Найти цитируемый пост)
вот предефайненые макросы gcc:

там и подсмотрел

Автор: math64 25.6.2012, 08:46
А может быть написать так:
Код

bool addCounter(const char *   szObjectName
   , const char *   szInstanceName
   , const char *   szCounterName
   )
{
...
    PDH_COUNTER_PATH_ELEMENTS_A pe;
    pe.szMachineName     = 0;
    pe.szObjectName      = (char*)szObjectName;      // объявлена как LPTSTR... без const
    pe.szInstanceName    = (char*)szInstanceName;
//и т. д.
}
bool res = addCounter( "Processor", "proc.exe", "Usage", ...  и т.д.

Автор: borisbn 25.6.2012, 16:15
math64, спасибо. Действительно проще...
Но и тема полезная - узнал как warning'и отключать...

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