7

我一般用 gcc 和 -ansi 标志在 Linux 下编程和编译;但我被迫在 Visual C++ 中工作,每当我编译我的 C 代码时,我都会收到所有 Microsoft 警告,例如

'fscanf':此函数或变量可能不安全。考虑改用 fscanf_s。

尽管在 MSDN 开发人员网站上执行了一些设置 ANSI C 项目的步骤,但我得到了这些,但所有 _s(“安全”)调用都不是 ANSI C!

关于将 Visual C++ Studio 置于严格的仅限 ANSI 模式的任何建议?

谢谢。

4

3 回答 3

6

如另一个答案中所述,#define'ing_CRT_SECURE_NO_WARNING将解决您在问题中提到的特定警告。

如果您真的在寻找仅 ANSI 模式,最接近的是/Za编译器开关。在 Visual Studio IDE 中,您可以在项目的 Properties 对话框中找到它(在Configuration Properties | C/C++ | Language | Disable Language Extensions下)。

请注意,几乎所有 Windows 应用程序都启用了 Microsoft 的编译器扩展;例如,我认为您甚至无法使用/Zaset. 如果您的代码确实是严格的 ANSI,那么您应该没问题。如果您在一个主要是严格的 ANSI 的项目中有一些特定于 Windows 的部分,您可能会隔离这些源并仅构建那些未设置的单独源文件/Za

于 2011-03-18T15:39:08.463 回答
4

这些警告可以通过定义来抑制_CRT_SECURE_NO_WARNING

转到 Procect Settings -> Preprocessor 并添加_CRT_SECURE_NO_WARNING

这并不强制编译器遵守 ANSI。只是禁止使用 ..._s 警告

于 2011-03-18T15:08:57.120 回答
2

抑制特定警告的一种方法是将以下内容添加到源中。

#if defined( _WIN32 )
#pragma warning(disable:4996)
#endif
于 2011-03-18T15:22:13.393 回答