C APUE 10.3信号:指针投射问题。
我正在学习APUE 10.3信号,只是混淆了C APUE 10.3信号:指针投射问题。,c,C,我正在学习APUE 10.3信号,只是混淆了SIG\u ERR、SIG\u DFL和SIG\u IGN的定义。定义如下: #define SIG_ERR (void (*)())-1 #define SIG_DFL (void (*)())0 #define SIG_IGN (void (*)())1 这是信号功能原型: void (*signal(int signo, void (*func)(int)))(int) 当我们调用信号(signo,SIG_-DFL)时,为什么没有函
SIG\u ERR
、SIG\u DFL
和SIG\u IGN
的定义。定义如下:
#define SIG_ERR (void (*)())-1
#define SIG_DFL (void (*)())0
#define SIG_IGN (void (*)())1
这是信号功能原型:
void (*signal(int signo, void (*func)(int)))(int)
当我们调用
信号(signo,SIG_-DFL)
时,为什么没有函数不匹配的问题,因为第二个参数应该是void(*)(int))
,然而,我们提供的SIG_-DFL
是(void(*)()
,void(*)(int))
与(void(*)()
?空括号()
在函数声明中表示函数可以接受未指定的参数。请不要与不描述参数的void
参数混淆。这样声明的函数:type function()
表示您不指定该函数的参数,因此可以使用任何参数或无参数调用该函数。事实上,这只是告诉编译器忽略该函数参数的类型检查,因为您不使用它们。
声明无参数函数的正确方法是type function(void)
因此,事实上,当对void(*)(int))
进行类型检查时,编译器只检查返回值类型
注意,C++中不是真的,只有C++中的C.,<代码>类型函数()/Cuffe等于“代码>类型函数(空))//> > < >
您可以查看官方的C99规范。函数定义在<强> 67.1,第141页。< /P> < P>。C(在没有显式<代码> Value>代码>参数的情况下,不确定类型的参数不确定),这将是不正确的,在C++中,这些定义将不起作用。 然而,虽然你可能在书中找到了这些,但是它们在真实系统中并不存在,只是因为它也必须在C++中工作。例如,在我的Linux系统上
#define SIG_DFL ((__sighandler_t) 0
其中\u sighandler\t
为
typedef void (*__sighandler_t) (int);
谢谢你们的帮助。你能告诉我证据吗?我指的是我能够学习的书籍、文件或规格?