linux 64位系统,C语言调用外部函数,返回值不对的问题
centos 64位操作系统,C 开发的程序调用一个外部函数(在另外一个 C 文件中定义),因为没有添加该外部函数的声明,导致函数返回的值不正确。示例如下:
两个源文件,main.c 和 func.c,内容如下:
main.c:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("main:%ld\n",func());
return 0;
}
func.c:
#include <stdio.h>
unsigned long long func()
{
unsigned long long a = 1;
unsigned long long x = (a << 32) | 123456;
printf("func:%ld\n", x);
return x;
}
编译执行,结果如下:
gcc main.c func.c ./a.out func:4295090752 main:123456
以上可以看到,func 函数里的值与 main 函数获取到的返回值不一致,返回值被截断了,只保留了低 32 位。
解决方法:
在 main.c 文件中添加 func 函数的声明,如下:
#include <stdio.h>
extern unsigned long long func();
int main(int argc, char *argv[])
{
printf("main:%ld\n",func());
return 0;
}
再次执行,结果就正常了,如下:
gcc main.c func.c ./a.out func:4295090752 main:4295090752
文章评论