C 如何获取退出库函数的地址并将其分配给全局变量?
我想得到exit库函数的地址,然后将这个地址分配给一个全局变量C 如何获取退出库函数的地址并将其分配给全局变量?,c,global-variables,shared-libraries,exit,C,Global Variables,Shared Libraries,Exit,我想得到exit库函数的地址,然后将这个地址分配给一个全局变量 //test3.c 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int fp = &exit; 5 6 int main(){ 7 printf("fp=%d\n",fp); 8 return 0; 9 } 当我在main函数中获取并将exit的地址分配给一个局部变量时,没有错误 //te
//test3.c
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int fp = &exit;
5
6 int main(){
7 printf("fp=%d\n",fp);
8 return 0;
9 }
当我在main函数中获取并将exit的地址分配给一个局部变量时,没有错误
//test4.c
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main(){
5 int fp = &exit;
6 printf("fp=%d\n",fp);
7 return 0;
8 }
如何将退出地址分配给全局变量?您应该使用正确的类型声明
fp
(即指向取int
但不返回任何内容的函数的指针):
不确定您想用
printf
做什么。如果要打印地址,请使用%p
而不是%d
您应该使用正确的类型声明fp
(即指向接受int
且不返回任何内容的函数的指针):
不确定您想用
printf
做什么。如果要打印地址,请使用%p
而不是%d
也见,也见,谢谢。但是,如果我在main函数中将exit的地址分配给局部变量,则没有错误。是的,但是有一个大的警告应该引起您的注意:初始化从指针生成整数,而不使用强制转换
我认为警告不是最重要的问题。我可以使用gcc选项来抑制此警告。当然可以抑制此警告,但这不是一个好主意。警告不是问题,而是解决方案提示。它会准确地告诉您出了什么问题:将指针指定给int
。因此,解决方案是修复int
变量的类型。我尝试使用void(*fp)(int)=&exit。已成功编译。但是为什么在全局范围内使用函数指针是正确的呢?出口地址似乎只有在链接后才能获得。谢谢。但是,如果我在main函数中将exit的地址分配给局部变量,则没有错误。是的,但是有一个大的警告应该引起您的注意:初始化从指针生成整数,而不使用强制转换
我认为警告不是最重要的问题。我可以使用gcc选项来抑制此警告。当然可以抑制此警告,但这不是一个好主意。警告不是问题,而是解决方案提示。它会准确地告诉您出了什么问题:将指针指定给int
。因此,解决方案是修复int
变量的类型。我尝试使用void(*fp)(int)=&exit。已成功编译。但是为什么在全局范围内使用函数指针是正确的呢?似乎只有链接后才能获得出口地址。
//test4.c
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main(){
5 int fp = &exit;
6 printf("fp=%d\n",fp);
7 return 0;
8 }
$ gcc -o test4 test4.c
test4.c: In function ‘main’:
test4.c:5:12: warning: initialization makes integer from pointer without a cast [enabled by default]
$ ./test4
fp=4195408
void (*fp)(int) = &exit;