Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 条件编译实现备选方案_C_Cross Platform_Portability_Conditional Compilation - Fatal编程技术网

C 条件编译实现备选方案

C 条件编译实现备选方案,c,cross-platform,portability,conditional-compilation,C,Cross Platform,Portability,Conditional Compilation,我正在寻找一个好的资源,它提供了关于C项目的条件编译和跨平台可移植性的最佳实践的讨论 例如: 编写使用TCP或SCTP的网络库(取决于底层平台)。通常的方法可能是定义一个公共API规范,让makefile决定编译正确的实现 我无法想象在这里使用宏和代码复制进行条件编译是一个好主意(因为这样的网络实现基本上是相同的,具有不同的发送和接收原语) 有没有人有好的建议或好的资源来讨论这些问题的最佳实践 谢谢你的意见 如果将宏限制在很少的位置,则宏是好的。例如: #if defined LINUX #

我正在寻找一个好的资源,它提供了关于C项目的条件编译和跨平台可移植性的最佳实践的讨论

例如:

编写使用TCP或SCTP的网络库(取决于底层平台)。通常的方法可能是定义一个公共API规范,让makefile决定编译正确的实现

我无法想象在这里使用宏和代码复制进行条件编译是一个好主意(因为这样的网络实现基本上是相同的,具有不同的发送和接收原语)

有没有人有好的建议或好的资源来讨论这些问题的最佳实践


谢谢你的意见

如果将宏限制在很少的位置,则宏是好的。例如:

#if defined LINUX
#   include "linux/mylib.h"
#elif defined WINDOWS
#   include "windows/mylib.h"
#else
#   error "unsupported platform!"
#endif

通常的方法有什么问题吗?您是否尝试过使用这种方法查找其他库的任何现有示例?我在使用宏解决此类问题时遇到的问题是(如果使用得更频繁),它们会使测试变得非常麻烦。是的,但是如何在两个lib之间共享相同的代码,这在两个平台上都是等效的?可能会引入一个级别的头间接寻址?