mac 开发linux程序,编写跨平台C代码(Windows,Linux和Mac OSX)

我将谈到这个具体的功能:

bool probe() {

#ifdef TARGET_OS_MAC

return probe_macosx();

#elif defined __linux__

return probe_linux();

#elif defined _WIN32 || defined _WIN64

return probe_win();

#else

#error "unknown platform"

#endif

}

以这种方式编写,作为一个if-elif-else链,消除了错误,因为它不可能编译没有一个有效的return语句或击中#error。

(我相信WIN32是为32位和64位Windows定义的,但我不能确定地告诉你没有查找它,这将简化代码。)

不幸的是,你不能使用#ifdef _WIN32 || _WIN64:请参阅http://codepad.org/3PArXCxo以获取示例错误消息。您可以使用特殊的仅预处理定义的运算符,如上所述。

关于根据功能或整个文件分割平台(如suggested),您可能或可能不想这样做。它将取决于您的代码的详细信息,例如平台之间共享的内容,以及您(或您的团队)最适合保持功能同步等问题。

此外,您应该在构建系统中处理平台选择,但这并不意味着您不能使用预处理器:为每个平台有条件地定义(由makefile或构建系统)宏。事实上,这是模板和内联函数通常最实用的解决方案,这使得它比尝试消除预处理器更灵活。它与整个文件方法很好地结合,所以你仍然使用适当的。

您可能需要一个配置头,将所有各种编译器和平台特定的宏转换为您所控制的知名宏和理解宏。或者你可以在你的编译器命令行中添加-DBEAKS_PLAT_LINUX,通过你的编译系统来定义宏(记住使用宏名称的前缀)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值