Comment déboguer called object ‘commande’ is not a function or function pointer?
Bonjour!
Voilà, je sais, c'est censé être un indice d'une erreur bête mais je viens de rencontrer:
error: called object ‘commande’ is not a function or function pointer
J'implore votre pitié, je ne trouve pas l'erreur bête, pouvez-vous m'aider, Ô nobles développeurs?
J'ai épluché mon code ainsi que des pages web de personnes ayant eu une erreur similaire, je ne vois pas d'où la mienne peut bien venir...
Il s'agit du code d'un shell UNIX recréé à la main à partir de rien...
L'erreur en entier:
Code:
1 2 3 4 5 6
| copp@b032-26:~$ projet.c: In function main:
projet.c:142:22: error: called object commande is not a function or function pointer
commande = commande();
^
projet.c:138:6: note: declared here
int commande = 0; |
et mon code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| int commande(){
parsing();
switch(symboleP){
int pid;
case 0:// \n
case 1:// ;
pid = fork();
if(pid > 0){
int valeurWait = wait(&status);// Cette instruction suspend le processus père jusqu'à ce qu'un des processus fils se termine, elle retourne le pid du processus qui s'est terminé et l'état du processus terminé est placé à l'adresse &status.
if(WIFEXITED(status) == 0){
return 0;
}
}else if(pid == 0){
execvp(respP[0],respP);
}else{
printf("erreur de pid");
}
break;
case 2: // &
//*com[i++]=0;*//
pid=fork();
/*
Mettre un if pour que le pere observe le fils
le exec sera dans le fils
*/
if(pid>0){
/* if (background==0) {
int valeurWait = wait(&status);
} else {
/*
A la fin de l execution normale du fils, on retourne vers le processsus pere
le return 0 permet d'afficher le prompt Dauphine> conformement au switch du main.c
*/
//i=0;
return 1;
} else {
return 7;
}
break;
case 3: // <
if(pid>0){
/* if (background==0) {
int valeurWait = wait(&status);
} else {
/*
A la fin de l execution normale du fils, on retourne vers le processsus pere
le return 0 permet d'afficher le prompt Dauphine> conformement au switch du main.c
*/
//i=0;
return 1;
} else {
return 7;
}
break;
}
return 0;
}
int main(){
int commande = 0;
printf("Dauphine>");
fflush(stdout); //Pour vider le buffer et forcer l'execution de la commande mais je n'en sais pas plus..!
while(1){
commande = commande();
switch(commande){
case 7: // EOF
return 0;
case 0: // CR
printf("Dauphine>");
fflush(stdout);
break;
}
fflush(stdout);
}
return 0;
} |