“内联C”问题

时间:2011-02-27 11:42:43

标签: 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;
}

输出:

-2

为什么我输出的输出为“-2”?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

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