【发布时间】:2018-05-21 12:56:41
【问题描述】:
有没有一种方便的方法来处理在不同平台上可能具有不同价值的 C typedef?
例如
#if defined(_WIN32)
#define foo_t int32_t
#elif defined(_WIN64)
#define foo_t int64_t
#else
#define foo_t long
#endif
void handle_foo(foo_t* in) {
...
}
目前我正在像这样在 Perl 6 中处理这个
sub handle_foo32(int32 is rw) is native(Str) { * }
sub handle_foo64(int64 is rw) is native(Str) { * }
sub handle_foo00(long is rw) is native(Str) { * }
sub handle-foo(Int $in) {
if $*DISTRO.is-win {
given $*KERNEL.bits {
when 32 {
handle_foo32(my int32 $ = $in);
}
when 64 {
handle_foo64(my int64 $ = $in);
}
}
} else {
handle_foo00(my long $ = $in);
}
}
【问题讨论】:
-
不同类型定义及其条件背后是否有更深层次的逻辑?你想达到什么目标? C方式通常是使用一个定义你想要的语义的标题,而不是太关心细节。
-
@Yunnosch:这是关于尝试使用 C 编译器不与本机库交互。所以有办法只使用一个头文件来获得正确的语义。
标签: c raku nativecall