2010-09-28 5 views
1

J'ai un étrange problème de construction.Impossible de créer un exemple sigqueue avec gcc mais g ++ est ok?

J'ai un programme de test simple qui envoie une sigqueue à un autre processus.

Cet exemple peu de code construit et fonctionne quand je le construire comme un programme C++ (compilé avec g ++) mais quand je compile comme programme alternatif (avec gcc) je reçois une erreur qu'il ne trouve pas le struct Sigval .

L'exemple court:

#include <stdio.h> 
#include <stdlib.h> 
#include <signal.h> 
#include <unistd.h> 
#include <sys/types.h> 

int main(int argc, char *argv[]) 
{ 
     sigval value; 
     value.sival_int = 123; 
     sigqueue(0,SIGUSR1, value); 
} 

S'il vous plaît noter que j'ai remplacé le pid avec 0 pour simplifier cette question.

Et si je compilez avec gcc je reçois ceci:

$> gcc sigusr1_mini.c 
sigusr1_mini.c: In function ‘main’: 
sigusr1_mini.c:9: error: ‘sigval’ undeclared (first use in this function) 
sigusr1_mini.c:9: error: (Each undeclared identifier is reported only once 
sigusr1_mini.c:9: error: for each function it appears in.) 
sigusr1_mini.c:9: error: expected ‘;’ before ‘value’ 
sigusr1_mini.c:10: error: ‘value’ undeclared (first use in this function) 

Qu'est-ce que je manque ici, pourquoi ne peut-il trouver le struct Sigval? Et pourquoi g ++ le trouve-t-il?

Merci Johan

+0

N'hésitez pas à ajouter un commentaire sur pourquoi cette question a été downvoted ... – Johan

+0

J'ai trouvé ceci utile. Semblait comme il méritait une upvote à moi. – Jake88

Répondre

5

En C, struct et union balises introduisent pas les noms qui peuvent être utilisés seuls comme ils le font en C++. Vous devez le préciser:

union sigval value; 
+0

En C++, ils ne sont pas non plus des identifiants, mais peuvent être utilisés comme tels s'il n'y a pas d'ambiguïté. –

+0

@Jans Gustedt: Cette mise à jour est-elle exacte? – caf

+1

Hm, difficile. J'opterais pour quelque chose comme "... les balises ne peuvent pas être utilisées à la place des identifiants ordinaires comme ils peuvent l'être en C++". –

1

Comment est défini dans Sigval h fichier? Le compilateur C peut nécessiter une définition complète, par exemple:

valeur de sigval de l'union;

Questions connexes