2012-10-15 48 views
6

如何清除#pragma region上的GCC警告? 我添加了pragma region來輕鬆查看代碼,但它報告#pragma region上的警告。 我正在使用Visual Studio 2010.如何刪除#pragma區域的GCC警告?

+4

你在Visual Studio 2010 GCC編譯? – logoff

+0

可能有用的閱讀:http://dbp-consulting.com/tutorials/SuppressingGCCWarnings.html – altendky

+0

我的建議:重構代碼。將區域變成單獨的功能。 – user877329

回答

6

不要在GCC上使用它? :)

我可以在那一刻想到的最簡單的辦法就是使用預處理條件吧:

#ifndef __GNUC__ 
#pragma region 
#endif 

// Stuff... 

#ifndef __GNUC__ 
#pragma endregion 
#endif 

不是很好看或可讀的,但將使代碼編譯不會對GCC警告。

+0

可以很容易地被宏觀化爲可讀性 – altendky

+1

@altendky我不確定它,因爲它被Visual Studio編輯器用來表示可以摺疊的區域。這取決於Visual Studio編輯器解析器的優點。 –

+6

@altendky - 如何?宏的* replacement-list *中的單個'#'(而不是'##')不會標識預處理器指令。它是stringify操作符。 '#'操作符後面的東西必須是一個宏參數名稱。 –

8

GCC有這樣的警告標誌:

-Wunknown的編譯指示 當遇到一個#pragma指令未通過GCC明白警告。如果使用此命令行選項,則甚至會爲系統頭文件中的未知編譯指示發出警告 。這是 而不是 這種情況下,如果警告僅由-Wall命令行選項啓用。

按照慣例,您可以否定它,這意味着未知的雜注將不會被警告。也就是說,使用-Wno-unknown-pragmas

請注意,-Wno-unknown-pragmas必須出現在啓用此警告的任何命令行標誌之後,例如-Wall - 這也會禁用所有未知編譯指示中的警告,因此請小心使用。

+3

只是爲了迂迴,此選項會關閉_all_ pragmas的警告,無法選擇哪些編譯指示碼應該生成警告,哪些不應該。 –

+0

是的,@JoachimPileborg和這個診斷('unknown-pragmas')有時可以挽救生命,如果你搞砸了'omp'編譯指示或類似的東西... –

4
#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wunknown-pragmas" 
... Code using Unknown pragmas ... 
#pragma GCC diagnostic pop 
+1

由於你也在Windows上構建,你可能想要將其封裝在:#ifdef __GNUC__ – Eric

3

這似乎是一個MSVC特定的編譯,所以你應該使用

#ifdef _MSC_VER 
#pragma region 
#endif 

<code here> 

#ifdef _MSC_VER 
#pragma endregion 
#endif