簡體   English   中英

不需要的sal.h警告

[英]Unwanted sal.h warnings

我正在嘗試使用VS 2008來編譯一些C代碼。 我將項目配置為使用ANSI C標准,沒有任何語言擴展。 我還將警告級別從3提高到4。

在構建項目時,我總是收到此警告:

c:\program files\microsoft visual studio 9.0\vc\include\sal.h(108) : warning C4001: nonstandard extension 'single line comment' was used

我理解這個警告,但我怎么擺脫它呢? 沒有在任何地方包含sal.h。 此外,在創建解決方案時,我選擇了Win32 Console Application並選中了“Empty Project”復選框。

編輯:我按照建議啟用了/ showIncludes開關,但它並沒有真正幫助,因為它沒有顯示包含什么的內容。 VS似乎包含了很多東西:

Compiling...
go.c
Note: including file: c:\projects\c\kr\kr\e.01.01.h
Note: including file:  c:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h
Note: including file:   c:\Program Files\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
Note: including file:    c:\Program Files\Microsoft Visual Studio 9.0\VC\include\sal.h
c:\program files\microsoft visual studio 9.0\vc\include\sal.h(108) : warning C4001: nonstandard extension 'single line comment' was used
Note: including file:    c:\Program Files\Microsoft Visual Studio 9.0\VC\include\crtassem.h
Note: including file:    c:\Program Files\Microsoft Visual Studio 9.0\VC\include\vadefs.h
Note: including file:   c:\Program Files\Microsoft Visual Studio 9.0\VC\include\swprintf.inl
Linking...

我錯過了一些編譯器開關嗎?

#pragma warning( disable:4001)

把這個放在有問題的行之前編譯的地方。

有關更多詳細信息,請參閱MSDN中的#pragma warning documentation。

稍后編輯

使用Visual C ++中的選項在編譯時顯示包含文件(它應該在C ++部分的高級選項中的某個位置)。 它可以提供包含sal.h的想法。 可能一些VC庫間接包含此標頭。 如果它是一個C頭,我想知道為什么他們使用C ++風格的評論...

不幸的是你有點卡住了 - 微軟的運行時頭文件似乎不僅僅使用單行注釋sal.h (例如, stdlib.h使用它們),所以你可以:

  • 使用pragma包裝#include指令以在包含它們時禁用警告並在之后重新啟用它們
  • Visual Studio連接站點向MS提交錯誤報告
  • 使用其他一些運行時庫(也許Dinkumware會讓你編譯ANSI干凈?)
  • 放棄禁用擴展(我想知道是否有人成功地使用該選項而不是小型演示或實驗)

或上述的某種組合。

選項#1很可能讓你很容易走:

#pragma warning( push)
#pragma warning( disable : 4001)

#include <stdlib.h>

/* other runtime includes */
#pragma warning( pop)

但是如果運行時頭文件中還有其他非ANSI內容,我也不會感到驚訝。 在給出選項時,看起來他們已經嘗試將ANSI清理干凈,但我懷疑它沒有經過嚴格測試(特別是在非默認警告級別)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM