Prob比较C中的指针和整数

时间:2010-06-17 16:12:29

标签: c signals

您好我的代码有问题。当我使用此功能时,我没有任何警告。 :

    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);
   }

有人能告诉我问题出在哪里吗?

3 个答案:

答案 0 :(得分:10)

在第二个代码中,您正在比较signal,它甚至不是代码中的局部变量。事实上,signal正如您所使用的那样,可能是指the signal function

相反,在第一个代码中,您switch sigint,这是函数的{{1}}参数。

答案 1 :(得分:4)

在第二个区块中,您要与signal进行比较,而不是sig。由于signal未在本地声明,因此您实际上是在与signal()函数的指针进行比较。

答案 2 :(得分:1)

在第二个版本中,您将函数中未定义的信号与SIGINT等进行比较。信号在别处被声明为指针。

也许您打算在函数原型中重命名sig来发信号