c - 删除 C 的 Microsoft 特定扩展

标签 c gcc visual-studio-2012

如何在VS2012中编写C程序而不使用微软特定的扩展C库?

例如 scanf_s() 是 Microsoft 特定的实现。但如果我们使用它,我们就无法在 Linux 中编译代码。

那么我们应该使用 Linux VM 并行地在 gcc 中编译代码吗? 或者 我们可以在Windows上安装gcc。 或者 VS 2012 本身是否有更好的选择或调整来实现这一目标?

最佳答案

设置“禁用语言扩展”只会删除某些语言功能。这些功能的列表位于 here .

但是,Microsoft 提供的额外功能并不是语言功能 - 它们只是可选功能,如果您想使用它们,就可以使用它们。它们不会被该设置禁用。标准函数的安全版本(后缀为 _s)属于此类。

话虽如此,如果您导航到 header 中 scanf_s 的定义,您可以看到 Microsoft 提供了一种禁用此特定函数系列的方法。

如果您在代码中的 header #includes 之前定义了以下内容

#define __STDC_WANT_SECURE_LIB__ 0

那么 scanf_s 将不再编译。

如果您想通过编译器开关实现此目的,请转到项目属性,然后找到预处理器定义。在末尾添加以下定义:

__STDC_WANT_SECURE_LIB__#0

您可能会找到类似的方法来禁用不属于“标准”C 的其他附加 Microsoft 功能。

关于c - 删除 C 的 Microsoft 特定扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19627390/

相关文章:

c - 为什么在写入寄存器时选择补码

c - 如何在 C 中打印 __m128i 变量的位?

gcc - 分支到 Microblaze CPU 上的中断处理程序,汇编语言

visual-studio-2012 - 如何使用 Visual Studio 在 Windows 上构建 Tor?

visual-studio-2012 - 如何修复构建后事件中的 MSB3073 错误?

c - 如何在 c 中显示所有接口(interface) IPv6/前缀地址

c 将多个参数传递给线程

gcc - 获取当前的 GCC 异常模型

c - 如何使用 MinGW 在命令行上编译 C 程序?

c# - 更新所有已安装的 NuGet 可移植库后,PCL 项目未编译