Logo du forum
 

Forum TTH-News

| Inscription | | Recherche | | FAQ | | Accueil | | Liste des membres |
| Calendrier |
 
Vous n'êtes pas identifié! [Connexion] ou [Inscription] Forum » Programmation » [C / C++ / C#] » Erreur compilation
Login Mot de passe

2 visiteurs sur ce topic (0 membre(s), 2 invité(s) )


Auteur
Sujet : Erreur compilation
zorgh
Master
Membre # 7668

 Avatar du membre
Lieu : FRANCE

Messages :
869 (0.16 par jour)


Score :

Message du 10-03-2008 @ 17:54      Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   


Bonjour,

J'ai une erreur sur ce code source; Je ne parviens pas à la corriger.

Code :



#include <stdio.h>
#include <stdlib.h>

int pip[2]; /* descripteur de pipe */
char buf[6];

main()
{
pipe(pip); /* creation pipe */
switch (fork())
{
case -1:
perror("fork");
exit(1);
case 0:
fils();
default:
pere();
}
pere()
{
close pip[0];
write (pipe[1],"hello",5); /* écriture pipe */
exit(0);
}
fils()
{
close pip[0];
read (pipe[0],buf,5); /* lecture pipe */
exit(0);
}
}




L'erreur est la suivante erreur: expected «;" before «{" token --> ligne au niveau de { après l'appel pere()

Toute aide est la bienvenue.

Merci bien
----------
Toshiba M30X-125 Intel Centrino PM 1,7 Ghz - 1 Go DDR - DD 60 Go - 15,4"W TFT - Ati Radeon 9700
- Haut de page -
Paddy
Vétéran
Membre # 8375

 Avatar du membre
Lieu : Sélestat

Messages :
8546 (1.59 par jour)


Score :

Message du 10-03-2008 @ 18:38   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Est-ce normal que tes méthodes pere() et fils() soient dans ta méthode main() ?
Mes cours de C/C++ sont trop loin pour que je me souvienne si cela vient bien de là :p

Si je comprend bien, ton compilateur n'arrive pas à comprendre la ligne
Code :


}
pere()
{



Pour lui, tu fait un 2e appel à la méthode pere(), il attend donc un ";", alors qu'en fait c'est la première ligne de définition de la méthode (si j'ai bien compris :p)

Le code correct serai donc, si j'ai raison :
Code :


#include <stdio.h>
#include <stdlib.h>

int pip[2]; /* descripteur de pipe */
char buf[6];

main()
{
pipe(pip); /* creation pipe */
switch (fork())
{
case -1:
perror("fork");
exit(1);
case 0:
fils();
default:
pere();
}
}
pere()
{
close pip[0];
write (pipe[1],"hello",5); /* écriture pipe */
exit(0);
}
fils()
{
close pip[0];
read (pipe[0],buf,5); /* lecture pipe */
exit(0);
}



HS : Grr, ma signature a encore perdu ses retours à la ligne :'(

[message édité le 10-03-2008 @ 18:43 Par Paddy]
----------
Masterdiablo /// PS3 - Wii U - iPhone 6s 128Gio - iPhone 5 64Gio (pour Madame)
PC : Core i7 3770 - Asus P8Z77-V PRO - 8Gb GSkill Extreme3 - Asus HD7870 2Gb - Crucial M4 128Go - Caviar Black 1To - Antec Sonata IV
Portable : Asus M51Sn-AS023C ** 15"4 - T9300 - 3 Gio DDR2 667Mhz - Geforce G9500 M GS - HD 250Gio
- Haut de page -
Dédé
Modérateur
Membre # 6048

 Avatar du membre
Lieu : Courbevoie (France, 92)

Messages :
9896 (1.8 par jour)


Score :

Message du 10-03-2008 @ 18:54   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Ouaip, c'est juste un mélange d'accolades à priori :o
----------
ChromeBook série 5
- Haut de page -
zorgh
Master
Membre # 7668

 Avatar du membre
Lieu : FRANCE

Messages :
869 (0.16 par jour)


Score :

Message du 10-03-2008 @ 19:44   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Bonsoir,

Merci pour ces compléments d'informations.
Le raisonnement de Paddy semble correct excepté le fait que le compilateur considère close comme une variable non déclarée dans la fonction pere() et fils(). La déclaration du pipeline se faisant dans la fonction principale.

Je n'ai pas suffisament de recul et d'expérience pour corriger ce problème d'agencement d'accolades comme le fait remarquer Dédé.
----------
Toshiba M30X-125 Intel Centrino PM 1,7 Ghz - 1 Go DDR - DD 60 Go - 15,4"W TFT - Ati Radeon 9700
- Haut de page -
icy
Administrateur
Membre # 871

 Avatar du membre
Lieu : Bxl

Messages :
23209 (3.74 par jour)


Score :

Message du 10-03-2008 @ 19:47   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

utilise un ide qui fait le format pour toi ...
par ailleurs, il manque pas des break dans ton switch?
----------
"May He touch you with His Noodly Appendage"
- Haut de page -
zorgh
Master
Membre # 7668

 Avatar du membre
Lieu : FRANCE

Messages :
869 (0.16 par jour)


Score :

Message du 10-03-2008 @ 19:57   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Pourquoi placer un break ?

C'est un code source issu d'un support de formation. J'ai repris le code. J'ai utilisé l'éditeur vim sous nux et geany comme IDE.
----------
Toshiba M30X-125 Intel Centrino PM 1,7 Ghz - 1 Go DDR - DD 60 Go - 15,4"W TFT - Ati Radeon 9700
- Haut de page -
icy
Administrateur
Membre # 871

 Avatar du membre
Lieu : Bxl

Messages :
23209 (3.74 par jour)


Score :

Message du 10-03-2008 @ 19:59   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

ah je sais pas ce que dois faire ton pgm, mais si ton fork return 0, il fera pere et fils si tu met pas de break ...

[message édité le 10-03-2008 @ 20:04 Par icy]
----------
"May He touch you with His Noodly Appendage"
- Haut de page -
Paddy
Vétéran
Membre # 8375

 Avatar du membre
Lieu : Sélestat

Messages :
8546 (1.59 par jour)


Score :

Message du 10-03-2008 @ 20:02   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Ya un exit(1) dans le cas -1 Icy, il va pas "killer le process" et donc éviter de passer dans le deuxième case ?

[message édité le 10-03-2008 @ 20:04 Par Paddy]
----------
Masterdiablo /// PS3 - Wii U - iPhone 6s 128Gio - iPhone 5 64Gio (pour Madame)
PC : Core i7 3770 - Asus P8Z77-V PRO - 8Gb GSkill Extreme3 - Asus HD7870 2Gb - Crucial M4 128Go - Caviar Black 1To - Antec Sonata IV
Portable : Asus M51Sn-AS023C ** 15"4 - T9300 - 3 Gio DDR2 667Mhz - Geforce G9500 M GS - HD 250Gio
- Haut de page -
icy
Administrateur
Membre # 871

 Avatar du membre
Lieu : Bxl

Messages :
23209 (3.74 par jour)


Score :

Message du 10-03-2008 @ 20:04   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Paddy a écrit

Ya un exit(1) dans le cas -1 Icy, il va pas "killer le process" et donc éviter de passer dans le deuxième case ?



voulais dire return 0 ;)
----------
"May He touch you with His Noodly Appendage"
- Haut de page -
B2000
Administrateur
Membre # 185

 Avatar du membre
Lieu : France/Poitiers/juste à côté...

Messages :
9757 (1.54 par jour)




Message du 10-03-2008 @ 22:35   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

manque les accolades pour delimiter le case 0 (obligation de mettre des accolades quand plusieurs fonctions séparées par des points virgules)

Code :

case 0:
{
fils();
default:
pere();
}



[edit]
j'ai rien dit, c'est tellement pas lisible que j'avais pas vu le default au milieu
par contre, y a pas de break comme le signal Icy...
[/edit]

[message édité le 10-03-2008 @ 22:37 Par B2000]
----------
Intel i5 2500K | Noctua NH-U12S | Asus P8P67 Pro Rev3.1 | 2x HyperX Fury 8Go DDR3-1866MHz CAS 10 | PNY GeForce GTX 1060 XLR8 OC, 6 Go | Sandisk Ultra Plus 256Go | Sony AD-7280S | Logitech QuickCam Pro 5000 | Microsoft Natural Ergonomic 4000 | Logitech Cordless Optical Mouse | Iiyama ProLite E2472HDD
Lenovo T430s : i5 3320m / 2x8Go / SAMSUNG 840 Pro 512Go / station Mini Dock serie 3 / LG 34um95 3440x1440 34" / SAMSUNG SyncMaster SA450 1920x1200 24"/ Clavier Lenovo Ultraslim sans fil / Souris Logitech MX Anywhere 2
Nexus 6 64Go Android 7.0.1 | Garmin Forerunner 305 | Nikon COOLPIX S9200 + Transcend SDHC 8GB | Canon PIXMA IP4850 | ADSL neufbox de SFR
Pour dialoguer en live, le chat TTH ou par mIRC sur irc://porsche.webchat.org:6667/tt-hardware
Rejoignez la team EBuyClub TTH !!!
Un jour j'ai mangé une pomme...
- Haut de page -
zorgh
Master
Membre # 7668

 Avatar du membre
Lieu : FRANCE

Messages :
869 (0.16 par jour)


Score :

Message du 12-03-2008 @ 18:15   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Voici le code qui va bien.

Il fallait des () de fermeture sur la fonction close et sortir effectivement les fonctions pere() et fils() de la fonction principale.

Un break n'est pas nécessaire puisque j'ai un exit(1).

Code :


#include <stdio.h>
#include <stdlib.h>

int pip[2]; /* descripteur de pipe */
char buf[6];

int main()
{   
   pipe(pip); /* creation de pipe */
   switch (fork())
   {
      case -1: /* Code de gestion de l'erreur */
      perror("fork");
      exit(1);
      case 0: /* Code du processus fils */
      fils();
      default: /* Code du processus père */
      pere();
   }
   return 0;
}

pere()
{
   close (pip[0]);
   write (pip[1],"hello",5); /* écriture pipe */
   exit(0);
}
fils()
{
   close (pip[0]);
   read (pip[0],buf,5); /* lecture pipe */
   exit(0);
}



Merci encore pour vos contributions.
----------
Toshiba M30X-125 Intel Centrino PM 1,7 Ghz - 1 Go DDR - DD 60 Go - 15,4"W TFT - Ati Radeon 9700
- Haut de page -
B2000
Administrateur
Membre # 185

 Avatar du membre
Lieu : France/Poitiers/juste à côté...

Messages :
9757 (1.54 par jour)




Message du 12-03-2008 @ 18:20   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

il faut quand meme un break pour le case 0 (avant le default)... a moins que cela ne soit volontaire mais pas tres courant
----------
Intel i5 2500K | Noctua NH-U12S | Asus P8P67 Pro Rev3.1 | 2x HyperX Fury 8Go DDR3-1866MHz CAS 10 | PNY GeForce GTX 1060 XLR8 OC, 6 Go | Sandisk Ultra Plus 256Go | Sony AD-7280S | Logitech QuickCam Pro 5000 | Microsoft Natural Ergonomic 4000 | Logitech Cordless Optical Mouse | Iiyama ProLite E2472HDD
Lenovo T430s : i5 3320m / 2x8Go / SAMSUNG 840 Pro 512Go / station Mini Dock serie 3 / LG 34um95 3440x1440 34" / SAMSUNG SyncMaster SA450 1920x1200 24"/ Clavier Lenovo Ultraslim sans fil / Souris Logitech MX Anywhere 2
Nexus 6 64Go Android 7.0.1 | Garmin Forerunner 305 | Nikon COOLPIX S9200 + Transcend SDHC 8GB | Canon PIXMA IP4850 | ADSL neufbox de SFR
Pour dialoguer en live, le chat TTH ou par mIRC sur irc://porsche.webchat.org:6667/tt-hardware
Rejoignez la team EBuyClub TTH !!!
Un jour j'ai mangé une pomme...
- Haut de page -
icy
Administrateur
Membre # 871

 Avatar du membre
Lieu : Bxl

Messages :
23209 (3.74 par jour)


Score :

Message du 12-03-2008 @ 18:36   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

de tt facon s'il ne faut pas de break le cas 0 ne sert a rien ...
----------
"May He touch you with His Noodly Appendage"
- Haut de page -
B2000
Administrateur
Membre # 185

 Avatar du membre
Lieu : France/Poitiers/juste à côté...

Messages :
9757 (1.54 par jour)




Message du 12-03-2008 @ 19:35   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

icy a écrit

de tt facon s'il ne faut pas de break le cas 0 ne sert a rien ...



si, il sert a appeler fils() puis pere() alors que le default n'appelle que pere()
----------
Intel i5 2500K | Noctua NH-U12S | Asus P8P67 Pro Rev3.1 | 2x HyperX Fury 8Go DDR3-1866MHz CAS 10 | PNY GeForce GTX 1060 XLR8 OC, 6 Go | Sandisk Ultra Plus 256Go | Sony AD-7280S | Logitech QuickCam Pro 5000 | Microsoft Natural Ergonomic 4000 | Logitech Cordless Optical Mouse | Iiyama ProLite E2472HDD
Lenovo T430s : i5 3320m / 2x8Go / SAMSUNG 840 Pro 512Go / station Mini Dock serie 3 / LG 34um95 3440x1440 34" / SAMSUNG SyncMaster SA450 1920x1200 24"/ Clavier Lenovo Ultraslim sans fil / Souris Logitech MX Anywhere 2
Nexus 6 64Go Android 7.0.1 | Garmin Forerunner 305 | Nikon COOLPIX S9200 + Transcend SDHC 8GB | Canon PIXMA IP4850 | ADSL neufbox de SFR
Pour dialoguer en live, le chat TTH ou par mIRC sur irc://porsche.webchat.org:6667/tt-hardware
Rejoignez la team EBuyClub TTH !!!
Un jour j'ai mangé une pomme...
- Haut de page -
icy
Administrateur
Membre # 871

 Avatar du membre
Lieu : Bxl

Messages :
23209 (3.74 par jour)


Score :

Message du 12-03-2008 @ 19:46   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

aneffet :aneffet:

suis trop crevé moi :p
----------
"May He touch you with His Noodly Appendage"
- Haut de page -


Aller dans le forum :  

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2010

Valid XHTML 1.0 Transitional

Page générée en 0.064 secondes