请教: c语言中, #define SIG_ERR (void (*)())-1 是什么意思???

tge7618291 2009-05-03 01:57:33
<<Advanced Programming in the UNIX Environment>>书中给出了signal的函数原型, 如下:
#include <signal.h>
void (*signal(int signo, void (*func)(int)))(int);
Returns: previous disposition of signal (see following) if OK, SIG_ERR on error

然后又给出了几个宏常量:
#define SIG_ERR (void (*)())-1
#define SIG_DFL (void (*)())0
#define SIG_IGN (void (*)())1
这三个宏常量可作为signal的第二个实参.

现在的问题是:
signal的第个参数类型为: void (*func)(int))的, 可SIG_ERR宏把-1强制转换成void (*func)())的, 为什么??
我认为应该转换成void (*func)(int))的, 即: #define SIG_ERR (void (*)(int))-1
这两者有什么区别吗??我应该怎么去理解??

...全文
463 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tge7618291 2009-05-18
  • 打赏
  • 举报
回复
一楼正解啊
万猫学社 2009-05-03
  • 打赏
  • 举报
回复
顶一下!
Paradin 2009-05-03
  • 打赏
  • 举报
回复
是不好理解。我也觉得应该定义成后面那个
我想因为只对地址做检查所以参数就没关系了
另外老版本的c无参表示可以有任意参数
用这些宏做参数的时候没有转型吧?
貌似有的不是这么定义的http://topic.csdn.net/t/20040114/11/2662416.html

69,374

社区成员

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

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