2013-02-24 69 views
71

我想知道你傳遞給gcc編譯器以關閉未使用的變量警告的開關?我得到的錯誤出在Windows升壓的,我不想碰升壓代碼:如何禁用gcc中未使用的變量警告?

C:\boost_1_52_0/boost/system/error_code.hpp: At global scope: 
C:\boost_1_52_0/boost/system/error_code.hpp:214:36: error: 'boost::system::posix_category' defined but not used [-Werror=unused-variable] 
C:\boost_1_52_0/boost/system/error_code.hpp:215:36: error: 'boost::system::errno_ecat' defined but not used [-Werror=unused-variable] 
C:\boost_1_52_0/boost/system/error_code.hpp:216:36: error: 'boost::system::native_ecat' defined but not used [-Werror=unused-variable] 

我試圖同時使用-Wunused-value-Wno-unused-value但也抑制了上述消息。

什麼是正確的命令,這是我的編譯行:

g++ -g -fno-inline -Wall -Werror -Wextra -Wfloat-equal -Wshadow 
-Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wno-conversion 
-Wdisabled-optimization -Wredundant-decls -Wunused-value -Wno-deprecated 
-IC:\\boost_1_52_0 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 
-c -o op.o op.cpp 

也許-Wall覆蓋我的目標是什麼?

+0

由於錯誤消息或多或少說,嘗試'-Werror = no-unused-variable' – 2013-02-24 16:28:05

回答

182

-Wno-unused-variable開關通常是卓有成效的被發現。但是,如果您關心項目中的這些內容,那麼這確實是一個非常有用的警告。當GCC開始提醒你關於不在你的代碼中的東西時,它變得很煩人。

我建議你保持警告,但使用-isystem而不是-I包含第三方項目的目錄。該標誌告訴海灣合作委員會不要警告你無法控制的東西。

例如,而不是-IC:\\boost_1_52_0,比如-isystem C:\\boost_1_52_0

希望它有幫助。祝你好運!

+40

+1爲-isystem,非常有用 – 2013-02-24 18:13:29

+0

在哪裏添加此設置?是否在「項目設置/ AVR GNU C編譯器/其他」下,但它會被忽略(路徑是正確的,仍然會出現警告)當添加到目錄設置(取消選中相對路徑複選框)AtmelStudio將崩潰。 – hfrmobile 2014-02-26 08:18:31

+1

哇,我很高興發現關於系統。太棒了。 – Spacemoose 2015-10-07 11:27:14

9

使用-Wno-unused-variable應該工作。

+0

啊,未使用變量,而不是未使用的值! – WilliamKF 2013-02-24 16:28:04

+2

或者'-Wno-error = unused-variable',如果你想刪除錯誤並保持警告。 – 2013-02-24 16:28:23

+1

你實際上可以看到實際的警告是'[ - 錯誤=未使用變量]'。 – 2013-02-24 16:28:58

3

編譯器已經告訴你,它不是value而是variable。您正在尋找-Wno-unused-variable。另外,請嘗試g++ --help=warnings以查看可用選項的列表。

11

請參閱警告選項下的man gcc。有你有unused

警告選項一大堆
... -Wunused -Wunused功能-Wunused標籤-Wunused參數-Wunused價值-Wunused變量-Wunused-但-SET-參數-Wunused-but-set-variable

如果以no-爲前綴,它將禁用此警告。

許多選項的長名都以-f或-W開頭,例如-fmove-loop-invariants,-Wformat等等。這些大多數都有正面和負面的形式; -foo的否定形式是-fno-foo。本手冊僅記錄這兩種形式中的一種,無論哪種形式不是默認形式。

更詳細的解釋可以在Options to Request or Suppress Warnings

+0

不知道我可以在任何警告前添加「no-」。 – RNA 2016-01-12 06:52:28

-3

刪除-Wall它應該工作。刪除-Wall的問題是它也會抑制合法的警告。在這種情況下,您必須手動選擇-W選項,或在涵蓋所有警告後更改爲-Wno-unused-variable

LOCAL_CFLAGS = -Wno-unused-variable -g 
+2

此信息在以前的答案中已經存在。 – GManNickG 2013-05-28 22:26:10

-3
export IGNORE_WARNINGS=1 

它會顯示警告信息,但與構建繼續

51

如果你正在使用gcc和要禁用所選代碼的警告,可以使用#pragma編譯器指令:

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wunused-variable" 
(your problematic library includes) 
#pragma GCC diagnostic pop 

對於您控制的代碼,您還可以使用__attribute__((unused))來指示編譯器未使用特定變量。

+1

這是幾個GCC bug:[錯誤C++/53431:C++預處理器忽略#pragma GCC診斷](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431); [錯誤C++/66943:GCC警告OpenMP的Unknown Pragma,即使它支持它](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66943)和朋友。 – jww 2015-07-26 20:10:11

+0

在C源代碼中它不起作用。 – peterh 2015-09-06 13:09:41

+0

一般來說,我會說使用#pragma指令不是很安全,除非你真的知道你在做什麼,或者你正在使用例如並行化的OpenMP ...;) – 2016-02-17 00:12:25

55

有時你只需要壓制一些警告,並且想要保留其他警告,以保證安全。在您的代碼中,您可以使用GCC的未使用的屬性來抑制變量警告,甚至形式參數警告。比方說,你有這樣的代碼片段:

void func(unsigned number, const int version) 
{ 
    unsigned tmp; 
    std::cout << number << std::endl; 
} 

可能有一種情況,當你需要使用此功能的處理器 - 這(恕我直言)在C相當普遍++ Boost庫。然後您需要第二個正式參數版本,因此該函數的簽名與處理程序所需的模板相同,否則編譯將失敗。但你並不真的需要它的功能本身要麼...

如何標記變量或形式參數從警告排除解決的辦法是這樣的:

void func(unsigned number, const int version __attribute__((unused))) 
{ 
    unsigned tmp __attribute__((unused)); 
    std::cout << number << std::endl; 
} 

GCC有許多其他參數,您可以在手冊頁中查看它們。這也適用於C程序,不僅是C++,而且我認爲它可以用於幾乎所有的函數,而不僅僅是處理程序。繼續嘗試! ;)

PS:最近我用這個來抑制提升系列化的警告模板是這樣的:

template <typename Archive> 
void serialize(Archive &ar, const unsigned int version __attribute__((unused))) 

編輯:顯然,我沒有回答你的問題,你需要,drak0sha做的更好。這是因爲我主要關注問題的標題,我的不好。希望這可以幫助其他人,誰得到這裏,因爲該標題... :)

+0

不過,這正是我所期待的。 Thx :) – 2015-01-28 16:16:41

+6

對於形式參數,可以省略名稱,例如'void func(無符號數,const int)'。然後,gcc也不會抱怨未使用的'version'。 – 2016-10-08 10:29:07

1

如何禁用未使用的變量警告從gcc出來?
遇到錯誤出在Windows升壓的,我不想碰升壓代碼...

您訪問Boost's Trac和文件對加速的bug報告。

您的應用程序不負責清除庫警告和錯誤。圖書館負責清理自己的警告和錯誤。