![]() |
1
33
我将介绍这个特定功能:
以这种方式编写它,作为if-elif-else链,可以消除错误,因为如果没有有效的return语句或者没有命中#错误,就不可能编译。
http://codepad.org/3PArXCxo 错误消息示例。只能使用特殊的预处理 接线员,就像我上面说的。 suggested ),你可能想也可能不想那样做。这将取决于您的代码的细节,比如平台之间共享了多少,以及您(或您的团队)认为保持功能同步的最佳方式,以及其他问题。
您可能希望有一个单独的配置头,它可以将所有不同的编译器和平台特定的宏转换为您所控制的已知和理解的宏。或者,您可以通过构建系统将-DBEAKS\u PLAT\u LINUX添加到编译器命令行中,以定义该宏(请记住,在宏名称中使用前缀)。 |
![]() |
2
51
而不是重复你自己写同样的“如果定义”。。。。一次又一次地,你最好在头文件中声明probe()方法,并提供三个不同的源文件,每个平台一个。这还有一个好处,即如果您添加了一个平台,则不必修改所有现有的源代码,只需添加新文件即可。使用生成系统选择适当的源文件。 结构示例:
警告是因为probe()不返回值。换句话说,三个ifdefs都不匹配。 |
![]() |
3
5
所以你的代码是:
这就是为什么编译器抱怨到达非void函数的结尾。根本没有
另外,对于更一般的问题,以下是我在开发多平台/体系结构软件/库时的指导原则: 避免特殊情况。尝试编写与操作系统无关的代码。
当处理特定于系统的东西时,试着把东西包装成“不透明”的类。例如,如果您正在处理文件(Linux和Windows上的不同API),请尝试创建
简而言之:越少越好
|
![]() |
4
1
警告是因为如果没有任何定义是实际定义的,那么您就没有
|
![]() |
5
1
除了上面未完成的选项之外,为了添加更多的内容,指令
|
![]() |
itMaxence · 从c库调用objective-c方法 7 年前 |
![]() |
seladb · Makefile-目录不存在时失败-跨平台 7 年前 |
![]() |
Ryan · 调整StackLayout元素的高度 7 年前 |
![]() |
Sergei G · C printf跨平台格式,无警告[重复] 7 年前 |