2010-06-17 9 views
0

Salut, j'ai un problème avec ce code. Lorsque j'utilise cette fonction, je n'ai aucun avertissement. :Prob comparaison de pointeurs et d'entiers dans C

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


    } 
    } 

Mais quand je réécris la fonction avec cette nouvelle version, j'ai une « comparaison entre pointeur et entier » avertissement sur l'instruction 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); 
    } 

que quelqu'un peut me dire où est le problème?

+0

'click == N' quel type est N? 'signal == SIGINT' quels types sont signal et SIGINT? En outre, sur quelle ligne l'avertissement est-il signalé? –

+0

Comment "clic", "signal" et "N" sont-ils définis? – Pointy

+0

click est une variable globale initialisée à zéro, N est une constante. – Dimitri

Répondre

10

Dans le deuxième code, vous comparez signal, qui n'est même pas une variable locale dans le code. En fait, signal comme vous l'avez utilisé fait probablement référence à the signal function.

En revanche, dans le premier code, vous êtes switch sur sig, qui est un paramètre int à la fonction.

+1

Oui, 'signal()' est en fait une fonction. –

+0

Oui, 'signal' est une fonction, et c'est probablement * signal * dans le code ci-dessus ... mais pour tout ce que nous savons, il n'a pas' #include 'mais a fait' extern int SIGINT;/* ... */void * signal = malloc (3); –

+0

Vous avez totalement raison. Dans le second tas de code, je devrais comparer sig variable et non signal qui est fonction. C'est un mistalke insouciant. Mon mauvais;) Merci pour votre réponse;) – Dimitri

1

Dans la deuxième version, vous comparez le signal qui n'est pas défini dans votre fonction à SIGINT etc. Le signal est déclaré ailleurs comme pointeur.

Peut-être que vous vouliez dire renommer sig dans le prototype de fonction pour signaler

4

Dans le second bloc vous comparez contre signal, non sig. Étant donné que signal n'est pas déclaré localement, vous effectuez une comparaison avec un pointeur sur la fonction signal().