我有一些工具,我正在便携式C工作在Windows Visual Studio 2008和gcc在Ubuntu Linux基于#ifdef _WIN32
,但增加对Solaris的支持似乎是棘手的,特别是如果我想支持cc
以及gcc
。
举个例子,我有一些代码,sprintf
进入分配的内存缓冲区,在Linux/gcc上使用vasprintf
,在Windows/MSVC上使用_vscprintf
/vsprintf
。在Solaris上,我可以使用vsnprintf
,但我不知道要添加什么到我的#ifdef
s,或者我是否应该移动到其他东西。
希望我不需要移动配置cygwin, mingw。
autoconf(1)
手册有一节是关于可移植C语言编程的。
做这样的测试的唯一真正的方法是使用像gnu的autoconf + configure这样的东西(或者只是简单的configure)。然后你可以测试vsprintf是否存在,vasprintf测试失败,vsnprintf测试失败,等等。然后,您可以通过configure来定义要在代码中使用的HAS_VSPRINTF之类的东西,并在正确的函数周围编写包装器函数。
这将是最可移植的测试方式,也是编写解决方案的最可移植的方式,尽管可能也是最麻烦的-这绝对是我对生产代码所做的。