【发布时间】:2011-04-27 22:32:48
【问题描述】:
我正在编写一个预计可以使用所有主要编译器编译的 C 程序。目前我正在 Linux 机器上的 GCC 上进行开发,并将在提交代码之前在 MSVC 上进行编译。为了简化交叉编译,我使用-ansi 和-pedantic 标志进行编译。在我开始使用 C89 标准中不可用的 snprintf 之前,这一直很好。 GCC 可以在没有-ansi 开关的情况下编译它,但 MSVC 总是会失败,因为它不支持 C99。
所以我做了类似的事情,
#ifdef WIN32
#define snprintf sprintf_s
#endif
这很好用,因为 snprintf 和 sprintf_s 具有相同的签名。我想知道这是正确的方法吗?
【问题讨论】:
-
snprintf不是任何平台中所有 C 的标准吗? -
没有。
snprintf是 C99 标准的一部分。 MSVC 没有 C99 实现。 -
sprintf_s不等价。snprintf返回要写入的字符数,而sprintf_s在截断时返回 -1。见this discussion。 -
查看类似帖子的答案link
标签: c cross-platform compilation portability