0

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

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

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

4

1 回答 1

1

设置“禁用语言扩展”只是删除某些语言功能。这些功能的列表在这里

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

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

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

#define __STDC_WANT_SECURE_LIB__ 0

然后 scanf_s 将不再编译。

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

__STDC_WANT_SECURE_LIB__#0

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

于 2013-11-30T18:11:46.750 回答