Windows C运行时signal函数的信号处理函数应返回什么值?
Windows CRT signal函数中处理函数的返回值说明
针对Windows C运行时库(CRT)的signal函数:
void __cdecl *signal(int sig, int (*func)(int, int));
其注册的信号处理函数func的返回值规则如下:
- 处理函数完成信号处理后,应返回传入的信号编号(即第一个参数
sig),CRT会基于此继续执行该信号的默认处理流程(如果适用)。 - 若要跳过后续的默认信号处理,可返回
SIG_ERR,不过这种用法在MSVC实现中并不常见,更多是为了兼容C标准的设计。
虽然微软官方文档未明确标注这一点,但该返回值逻辑是遵循C标准的约定——C标准中信号处理函数的返回值用于指定后续的信号处理策略,MSVC作为标准兼容实现沿用了这一规则。需要注意,若返回非信号编号或SIG_ERR以外的值,可能会触发未定义行为。
内容的提问来源于stack exchange,提问作者pepece
相关产品推荐
相关产品推荐

