对 C 语言熟悉的朋友看进来!(200分)

  • 主题发起人 主题发起人 laline
  • 开始时间 开始时间
L

laline

Unregistered / Unconfirmed
GUEST, unregistred user!
void (*signal (int signo,void(*func)(int))) (int);
在看STEVENS的书的时候看到这样一个声明,觉得非常怪异,他说
如果使用下面的typedef〔Plauger1992〕,则可
使其简单一些。
typedef void Sigfunc(int);
然后,可将signal函数原型写成:
Sigfunc*signal(int,Sigfunc*);
谁能具体给解释一下这个声明,我总觉得这是声明了一个函数指针而不是声明
了一个函数
 
真是神秘,我考
 
是个函数指针,没错,
可能是个,返回函数指针的一个函数,他的一个参数又使用了函数指针
 
好象是嵌套
 
书的这个例子到底想说什么?实际上没人会写这样的代码吧?
 
我觉的是错的
 
编译一下就知了.
 
type tt=void(*func)(int)
void (*signal (int signo,tt)) (int);
这样可能更好理解,正如lich所说,该函数就是定义了一个函数指针,同样,里面
还调用了tt这样的一个函数指针。
如果想深入研究,那还是去找bc3.1中的Turbo Vision的源代码,里面可以学到很多东西。
 
一层一层的给他把皮剥下来...[:D]
signal函数的原型说明此函数要求两个参数,返回一个函数指针,而该指针所指向的函
数要求一个整型参数,但无返回值(void(*)(int))。
第一个参数signo是一个整型数。
第二个参数是信号处理函数指针,它所指向的函数需要一个整型参数,无返回值。
用一般语言来描述也就是
当调用signal设置信号处理程序时,
第一个参数signo是一个整型数
第二个参数是指向信号处理程序的指针。
signal的返回值则是指向以前的信号处理程序的指针。?
 
to tseug:
你的回答虽然和书上答的差不多,但是我还是有少许困惑的地方
我想,这样问一下可能会明确我的问题:
1。这个声明到底是声明了一个函数还是声明了一个函数指针
2。到底怎么声明一个返回函数指针的函数?比如常见的返回int型的如 int aaa();
返回 char * 的用char * aaa();
返回函数指针类型的呢?有好多人都用
void * aaa();然后再用typedef做转换,但是如果不用typedef呢,比如我想
声明一个返回值为一个“参数为int a,返回值为 int 的函数的指针” 的 函数 怎么
做,是这样吗: int ( * aaa() ) (int);
大家看看
如果用typedef: typedef int FUNC(int);
则上式是不是可写为 FUNC * aaa();
 
算了,不会
 
tseug说得很详细了,真好.
 
1.是声明了一个函数,名字:signal
2.int ( * aaa) (int);
 
这样的代码!
不用学了,对你没好处的
 
To Jiams:
这样的代码在C/C++里边是比较重要的,你自己可以不用,但是一定要看得懂。
定义函数指针类型,以简化函数指针编码和阅读,在很多大型公共库的源代码里有它频繁的亮相。
 
void (*signal (int signo,void(*func)(int))) (int);
是申明一个指向函数的指针,只不过这个函数的参数里又包括了一个函数指针func
如果用
typedef void Sigfunc(int);
那上面的申明是可以写成这样的
Sigfunc*signal(int,Sigfunc*);
{
int singo;
...
}
 
请大家仔细看看我的两个问题,给做个解释,谢谢!
 
后退
顶部