如何在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/