使用signal函数 error: invalid conversion from ‘void (*)()’ to ‘__sighandler_t

1 篇文章 0 订阅

最近在linux下使用alarm函数定时,使用signal()函数发信号

g++进行编译的时候,出现了如下错误:

signal(SIGALRM, DeleteLogs);
alarm(60);

main.cpp:15:31: error: invalid conversion from ‘void (*)()’ to ‘__sighandler_t {aka void (*)(int)}[-fpermissive]
     signal(SIGALRM, DeleteLogs);
                               ^
In file included from alarm.cpp:2:0:
/usr/include/signal.h:102:23: note:   initializing argument 2 of ‘void (* signal(int, __sighandler_t))(int)’
 extern __sighandler_t signal (int __sig, __sighandler_t __handler)
                       ^

检查程序,发信号需要按时执行的函数声明如下,实现时无需传入参数

void DeleteLogs();

查询了一下signal函数的原型如下,发现第二个参数的要求是void (int)

void ( *signal(int signum, void (*handler)(int)) ) (int);

于是修改函数声明与定义,调用时随便传入一个无用值就可以

void DeleteLogs(int);
//调用时DeleteLogs(0)即可

这样修改后,重新编译通过,测试正常

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值