signal 中几句声明请教

rs369007 2010-03-04 09:58:00


typedef void (*__p_sig_fn_t)(int);

#define SIG_DFL ((__p_sig_fn_t) 0)

宏 SIG_DFL 为什么这名声明
...全文
73 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rs369007 2010-03-05
  • 打赏
  • 举报
回复
引用 3 楼 thefirstz 的回复:
可能楼主没明白我表达的意思。。。


谢谢3楼的解读!
kivenanlice 2010-03-04
  • 打赏
  • 举报
回复
3楼正解。。。。。。。。
cy330206 2010-03-04
  • 打赏
  • 举报
回复
很详细啊,学习啊。。。。。。
昵称很不好取 2010-03-04
  • 打赏
  • 举报
回复
可能楼主没明白我表达的意思
#define SIG_DFL ((__p_sig_fn_t) -1) —— 是将-1强制转换为函数指针,并给它取了名字叫SIG_DFL
同样,#define SIG_DFL ((__p_sig_fn_t) 0) —— 是把0强制转换为函数指针,并给它取了名字叫SIG_DFL,这里将0转化为指针,其实就是一个空指针,在程序中如果有其它函数指针,就可以拿来与SIG_DFL比较,看这个指针是否为空,如果是空的话拿这个指针来操作会比较危险
给楼主一个例子:
#include <stdio.h>
typedef void (*__p_sig_fn_t)(int);
#define SIG_DFL ((__p_sig_fn_t) 0)

void fun(){
printf("%s\n","hello world");
}
int main(void){
void (*p)();
p = fun;
if(p == SIG_DFL) //这里判断这个函数指针p是否有值,而不是0,如果p为0,用来调用函数的话很危险
printf("p is NULL\n");
else
p();

return 0;
}
rs369007 2010-03-04
  • 打赏
  • 举报
回复
#define SIG_DFL ((__p_sig_fn_t) -1)

那SIG_DFL 不是被初始化为 -1? 这有什么特殊意义呢?
昵称很不好取 2010-03-04
  • 打赏
  • 举报
回复
说明SIG_DFL是一个函数指针,并已经初始化为NULL 了

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧