sid*_*com 5 c perl types inline
#!/usr/bin/env perl
use warnings;
use 5.012;
use Inline 'C';
my $value = test();
say $value;
__END__
__C__
void test() {
int a = 4294967294;
Inline_Stack_Vars;
Inline_Stack_Reset;
Inline_Stack_Push( sv_2mortal( newSViv( a ) ) );
Inline_Stack_Done;
}
Run Code Online (Sandbox Code Playgroud)
输出:
-2
Run Code Online (Sandbox Code Playgroud)
为什么我输入"-2"的输出?
Perl支持有符号和无符号整数,并且它的运算符将在它们之间很好地切换,但是你明确地请求IV(signed int type SV).请改用newSVuv.如果整数是32位但是perl使用64位整数,你还需要说UV a =或unsigned a =代替int,否则由newSVuv执行的强制转换将最终将符号位扩展到高32位.