不需要的sal.h警告

时间:2009-10-21 12:48:42

标签: c visual-studio-2008

我正在尝试使用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...

我错过了一些编译器开关吗?

2 个答案:

答案 0 :(得分:2)

#pragma warning( disable:4001)

把这个放在有问题的行之前编译的地方。

有关详细信息,请参阅MSDN中的#pragma警告文档。

稍后修改

使用Visual C ++中的选项在编译时显示包含文件(它应该在C ++部分的高级选项中的某个位置)。它可以提供包含sal.h的想法。可能一些VC库间接包含此标头。如果它是一个C头,我想知道为什么他们使用C ++样式注释...

答案 1 :(得分:2)

不幸的是,你有点卡住了 - 微软的运行时标题似乎只使用单行评论而不只是sal.h(例如,stdlib.h也使用它们),所以你可以: / p>

  • 使用pragma包装#include指令,以便在它们被包含时禁用警告并在之后重新启用它们
  • Visual Studio connect site
  • 向MS提交错误报告
  • 使用其他一些运行时库(也许Dinkumware会让你编译ANSI clean?)
  • 放弃禁用扩展程序(我想知道是否有人成功地将该选项用于小型演示或实验)

或以上的某种组合。

选项#1很可能让你很轻松:

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

#include <stdlib.h>

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

但是如果运行时头文件中还有其他非ANSI内容,我也不会感到惊讶。在给出选项时,看起来他们已经做了一些尝试ANSI清理,但我怀疑它没有经过严格测试(特别是在非默认警告级别)。

相关问题