gpt4 book ai didi

c - 使用 NativeCall 在不同平台上处理 C typedef

转载 作者:太空狗 更新时间:2023-10-29 16:48:23 25 4
gpt4 key购买 nike

有没有一种方便的方法来处理在不同平台上可能具有不同值的 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);
}
}

最佳答案

也许最直接的翻译是使用 constant 来引入一个在编译时计算的新符号。

my constant foo_t = do if $*DISTRO.is-win {
given $*KERNEL.bits {
when 32 { int32 }
when 64 { int64 }
}
} else {
long
}

绑定(bind)到类型对象的常量就像类型一样,可以在签名中使用。

sub handle_foo(foo_t is rw) is native { * }

关于c - 使用 NativeCall 在不同平台上处理 C typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50449428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com