您好我的代码有问题。当我使用此功能时,我没有任何警告。 :
void handler(int sig){
switch(sig) {
case SIGINT : { click++; fprintf(stdout,"SIGINT recu\n");
if( click == N){
exit(0);
}
}
case SIGALRM : fprintf(stdout,"SIGALRM received\n");
exit(0);
case SIGTERM: fprintf(stdout,"SIGTERM received\n");
exit(0);
}
}
但是当我用这个新版本重写函数时,我在if语句中有一个“指针和整数之间的比较”警告:
void handler( int sig){
printf("Signal recu\n");
if( signal == SIGINT){
click++;
fprintf(stdout,"SIGINT received; Click = %d\n",click);
if(click == N){
fprintf(stdout,"Exiting with SIGINT\n");
exit(0);
}
} else if(signal == SIGALRM){
fprintf(stdout,"SIGALRM received\n");
exit(0);
} else if(signal == SIGTERM){
fprintf(stdout,"SIGTERM received\n");
exit(0);
}
有人能告诉我问题出在哪里吗?
答案 0 :(得分:10)
在第二个代码中,您正在比较signal
,它甚至不是代码中的局部变量。事实上,signal
正如您所使用的那样,可能是指the signal
function。
相反,在第一个代码中,您switch
sig
,int
,这是函数的{{1}}参数。
答案 1 :(得分:4)
在第二个区块中,您要与signal
进行比较,而不是sig
。由于signal
未在本地声明,因此您实际上是在与signal()
函数的指针进行比较。
答案 2 :(得分:1)
在第二个版本中,您将函数中未定义的信号与SIGINT等进行比较。信号在别处被声明为指针。
也许您打算在函数原型中重命名sig来发信号