"内联C"问题

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"的输出?

Ben*_*oit 5

int a使用可能是32位表示.unsigned int如果要表示高于4,294,967,296/2的值,则应使用.


yst*_*sth 5

Perl支持有符号和无符号整数,并且它的运算符将在它们之间很好地切换,但是你明确地请求IV(signed int type SV).请改用newSVuv.如果整数是32位但是perl使用64位整数,你还需要说UV a =unsigned a =代替int,否则由newSVuv执行的强制转换将最终将符号位扩展到高32位.