当前位置: 技术问答>linux和unix
一个奇怪的函数定义,请大师们解释
来源: 互联网 发布时间:2017-05-18
本文导语: 最近在看一个国外的开源项目,其中用于信号处理的地方有一个函数,很奇怪,看不懂, #include "includes.h" #include "mcommon.h" static volatile int gotsig; static void fakehandler P((void)) //这个fakehandler 是什么东东?如何是...
最近在看一个国外的开源项目,其中用于信号处理的地方有一个函数,很奇怪,看不懂,
#include "includes.h"
#include "mcommon.h"
static volatile int gotsig;
static void fakehandler P((void)) //这个fakehandler 是什么东东?如何是函数名, 那后面的P又是什么东东?
{ gotsig=1;
}
static void failure P((void)) /* signal trap */ //这个failure是什么东东?如何是函数名, 那后面的P又是什么东东?
{ exitflag=2; /* merely sets a flag */
}
//请问下面是函数定义吗? 怎么又有分号? 请注意qsignal(sig,action)后面直接接上const int sig;这又是什么东东??
void qsignal(sig,action)const int sig;void(*action)P((void)); //注意这行总共包含两个是分号";"
{ gotsig=0;
if(SIG_IGN==signal(sig,(void(*)())fakehandler))
signal(sig,SIG_IGN);
else
{ signal(sig,(void(*)())action);
if(gotsig)
(*action)();
}
}
在主程序中,安装信号处理
qsignal(SIGINT,failure);
qsignal(SIGQUIT,failure);
qsignal(SIGTERM,failure);
|
void qsignal(sig,action)const int sig;void(*action)P((void));
{
...
}
大致等于
void qsignal(const int sig,void(*action)(void) action)
{
...
}
看到头文件还有一堆,差点没反应过来:
const char
*auth_getsecret P((const auth_identity*const pass)),
*auth_mailboxname P((auth_identity*const pass)),
*auth_homedir P((const auth_identity*const pass)),
*auth_shell P((const auth_identity*const pass)),
*auth_username P((const auth_identity*const pass));
原来是
const char *auth_getsecret (const auth_identity* const pass);
const char *auth_mailboxname (auth_identity* const pass);
const char *auth_homedir (const auth_identity* const pass);
const char *auth_shell (const auth_identity* const pass);
const char *auth_username (const auth_identity* const pass);
果然"变量"不分行不舒服斯基