代码之家  ›  专栏  ›  技术社区  ›  Dimitri

比较C中指针和整数的问题

  •  0
  • Dimitri  · 技术社区  · 14 年前

    嗨,我对这个代码有问题。使用此功能时,没有警告。:

        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 回复  |  直到 14 年前
        1
  •  10
  •   Mark Rushakoff    14 年前

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

    相反,在第一个代码中,您是 switch 安宁 sig ,这是一个 int 函数的参数。

        2
  •  4
  •   JSBÕ±Õ¸Õ£Õ¹    14 年前

    在第二个街区,你正在对比 signal 不是 sig . 自从 信号 不是在本地声明的,您实际上正在与指向 signal() 功能。

        3
  •  1
  •   mmmmmm    14 年前

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

    也许您打算将函数原型中的sig重命名为signal