2014-03-28 118 views
1

我是新的C++。我正在編譯Qt上的代碼源。我有這樣的警告:在C++中禁用警告

在文件中包含從../ListAllPrsilicaCameras/main.cpp:3: 在文件中包括來自/usr/include/c++/4.2.1/backward/iostream.h:31: /usr/include/c++/4.2.1/backward/backward_warning.h:32:2:warning:該文件至少包含一個不推薦使用或過時的標頭。請考慮使用C++標準第17.4.1.2節中找到的32個頭之一。例子包括用C++頭文件替換頭文件,或者代替棄用的頭文件。要禁用此警告,請使用-Wno-deprecated。 [-W#警告]

#warning此文件包含至少一個棄用或過時的標頭。

^1警告產生


我也有這些警告:

../ListCamerasProsilicaII/main.cpp:79:51: warning: unused parameter 'junk' [-Wunused-parameter] 
void SetConsoleCtrlHandler(void (*func)(int), int junk) 
               ^
../ListCamerasProsilicaII/main.cpp:89:23: warning: unused parameter 'Signo' [-Wunused-parameter] 
void CtrlCHandler(int Signo) 
        ^
../ListCamerasProsilicaII/main.cpp:140:57: warning: flag ' ' results in undefined behavior with 'u' conversion specifier [-Wformat] 
         printf("%s - %8s - Unique ID = % 8lu [email protected] = %15s [%s]\n",cameraList[i].SerialString, 
                 ~^~~~ 
../ListCamerasProsilicaII/main.cpp:147:57: warning: flag ' ' results in undefined behavior with 'u' conversion specifier [-Wformat] 
clang++ -headerpad_max_install_names -mmacosx-version-min=10.6 -o ListCamerasProsilicaII main.o -L/opt/local/lib/ -lPvAPI -lPvJNI -L/opt/local/lib -lJPEG -F/Users/rafikgouiaa/Qt//5.0.2/clang_64/lib -framework QtCore 
         printf("%s - %8s - Unique ID = % 8lu (unavailable, %u)\n",cameraList[i].SerialString, 
                 ~^~~~ 
../ListCamerasProsilicaII/main.cpp:152:53: warning: flag ' ' results in undefined behavior with 'u' conversion specifier [-Wformat] 
        printf("%s - %8s - Unique ID = % 8lu (*)\n",cameraList[i].SerialString, 
                ~^~~~ 
../ListCamerasProsilicaII/main.cpp:171:14: warning: unused parameter 'argc' [-Wunused-parameter] 
int main(int argc, char* argv[]) 
      ^
../ListCamerasProsilicaII/main.cpp:171:26: warning: unused parameter 'argv' [-Wunused-parameter] 
int main(int argc, char* argv[]) 
         ^
7 warnings generated. 

如何禁用此警告?

+5

不要這樣做,修復它! - 特別是當'我是新的C++' –

+2

修復很可能#include 而不是(!)

回答

3

重複上一個答案「答案出現在警告消息本身。」

"To disable this warning use -Wno-deprecated." 

您可以指定在Qt工程文件(.PRO)編譯器標誌加入這一行:

QMAKE_CXXFLAGS += -Wno-deprecated 

附:這將是更好的修復代碼本身

+0

根據編譯器的不同,可能還需要添加''-Wno-deprecated-declarations''。 – Hyndrix

3

答案是在警告消息本身:

編輯:

警告:該文件包括至少一個棄用或過時 報頭。請考慮使用C++標準的 17.4.1.2中的32個頭文件中的一個。例子包括用頭文件替換C++包含的頭文件,或者替代不推薦使用的頭文件。要禁用此警告,請使用 -Wno-deprecated。 [-W#警告]

通過iostream C++的頭更換iostream.h現在並不需要.h擴展了。

+0

如何禁用未使用參數的警告?我編輯了我的代碼 – BetterEnglish

+0

@phdstudent:看來你使用的是gcc或類似gcc的編譯器。在這種情況下,要禁用警告,只需在'W'之後放置'no',例如'-W-foo'變爲'-Wno-foo',分別打開和關閉'foo'警告名稱。但要真正瞭解這些事情,你應該閱讀你的編譯器documentatio/manual。 –

1

warning: unused parameter 'argc' [-Wunused-parameter] 
int main(int argc, char* argv[]) 
      ^
warning: unused parameter 'argv' [-Wunused-parameter] 
int main(int argc, char* argv[]) 

變化中的main定義:

int main() 
{ 
    // ... 

it's standard compliant


warning: unused parameter 'junk' [-Wunused-parameter] 
void SetConsoleCtrlHandler(void (*func)(int), int junk) 

未命名的參數在功能的實現也是合法的。當函數需要聲明具有特定固定簽名的參數時,這是非常有用的,但不需要該參數(例如,對於派生類中的方法,回調函數或模板參數)。

所以,如果是這樣的話,你可以改變函數的定義:

void SetConsoleCtrlHandler(void (*func)(int), int) 
{ 
    //... 

如果你控制的頭文件,修復它!對於那些你沒有(系統,第三方庫...)你可以使用-isystem標誌(這將使他們成爲「系統頭」,GCC/CLANG不會報告警告)。

E.g.

QMAKE_CXXFLAGS += -isystem ...