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
文章评论