gpt4 book ai didi

c - APUE 10.3 信号 : pointer cast issue.

转载 作者:太空宇宙 更新时间:2023-11-04 02:50:52 27 4
gpt4 key购买 nike

我正在学习 APUE 10.3 信号,只是混淆了 SIG_ERRSIG_DFLSIG_IGN 的定义。这是定义:

 #define SIG_ERR (void (*)())-1
#define SIG_DFL (void (*)())0
#define SIG_IGN (void (*)())1

这里是信号函数原型(prototype):

 void (*signal(int signo, void (*func)(int)))(int) 

当我们调用 signal(signo, SIG_DFL) 时,为什么没有函数不匹配问题,因为第二个参数应该是 void (*)(int)),但是,我们提供的SIG_DFL(void (*)())的类型,void (*)(int)) vs (无效 (*)()) ?

最佳答案

像这样声明的函数:type function() 意味着您没有指定该函数的参数,因此您可以使用任何参数或不使用任何参数来调用该函数。事实上,这只是告诉编译器忽略对该函数参数的类型检查,因为您不使用它们。声明不带参数的函数的正确方法是 type function(void)

所以,实际上,在对void (*)(int))进行类型检查时,编译器只检查返回值类型.

请注意,在 C++ 中并非如此,仅在 C 中如此。在 C++ 中,type function() 等同于 type function(void)

您可以查看官方C99 规范here .函数定义位于 6.9.1,第 141 页。

关于c - APUE 10.3 信号 : pointer cast issue.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22344303/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com