下面是一个有趣的问题...
我们有一些 C 库,虽然在 Linux 上开发,但应该是跨平台的,因为它们只依赖于 ISO/IEC 9899:1999 中定义的 C 标准库。当我们使用 MinGW 编译这些库时,一切似乎都很顺利,但今天我们发现 msvcrt 的 snprintf() 实现与 C99 标准中的定义不兼容。
我原本希望 MinGW 警告我 -std=c99 实际上并没有完全支持。否则,我怎么知道呢?
有没有其他的 C 标准库可以用于 Windows,最重要的是:MinGW 是否可以被告知链接它们而不是 msvcrt?
如果没有,我们至少需要一个列表或其他东西,以便检查关于 msvcrt 和 c99 的其他潜在可移植性问题。
PS:我知道 Cygwin 和 MSYS2,但我更喜欢本地的 Windows 二进制文件(部分原因是我们还在 Matlab 中使用我们的库)。
编辑: 抱歉,我应该更清楚地解释一下我的问题:msvcrt 的 snprintf() 应该输出 '\0' 作为最后一个字符,如果输出不适合的话。然而,msvcrt 实际上没有这样做,因此生成的字符串不再正确终止。我不知道为什么有人会选择以这种方式实现 snprintf(),因为对我来说,省略 '\0' 没有任何意义。
我们也尝试了建议的 __USE_MINGW_ANSI_STDIO,但我想那只是修复了缺少的格式说明符?至少对于我们具体的问题似乎没有任何影响。
__USE_MINGW_ANSI_STDIO
吗? - user694733