Logo du forum
 

Forum TT-Hardware

| 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

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


Auteur
Sujet : Erreur compilation
zorgh
Master
Membre # 7668

 Avatar du membre
Lieu : FRANCE

Messages :
792 (0.39 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 : Clermont-Ferrand

Messages :
6617 (3.35 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
PC : E8200 - P5K Pro - 2*1Go Corsair PC6400 XMS2 Twinx CL4 - PoV 7800GTX
Portable : Asus M51Sn-AS023C ** 15"4 - T9300 - 3 Go DDR2 667Mhz - Geforce G9500 M GS - HD 250Go
En attente d'une nouvelle CG : Athlon 64 3000+ - MSI K8N Neo4-F - 1024Mo PC3200 CMSAM
Wii - Mario Kart : 0645-5898-2327
- Haut de page -
Dédé
Modérateur
Membre # 6048

 Avatar du membre
Lieu : Courbevoie (France, 92)

Messages :
9466 (4.44 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
----------
PowerBook G4 12" : Power PC G4 1.5 Ghz, 1.25 Go DDR, 80 Go 5400 trs/mn, 12" XGA, Superdrive et iPod G5 30 Go + Shure E4c



X22 : Core 2 Duo T7500 2,2 GHz, 1 Go, 160 Go 5400 trs/mn, 14" WXGA
- Haut de page -
zorgh
Master
Membre # 7668

 Avatar du membre
Lieu : FRANCE

Messages :
792 (0.39 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 :
16590 (5.88 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 :
792 (0.39 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 :
16590 (5.88 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 : Clermont-Ferrand

Messages :
6617 (3.35 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
PC : E8200 - P5K Pro - 2*1Go Corsair PC6400 XMS2 Twinx CL4 - PoV 7800GTX
Portable : Asus M51Sn-AS023C ** 15"4 - T9300 - 3 Go DDR2 667Mhz - Geforce G9500 M GS - HD 250Go
En attente d'une nouvelle CG : Athlon 64 3000+ - MSI K8N Neo4-F - 1024Mo PC3200 CMSAM
Wii - Mario Kart : 0645-5898-2327
- Haut de page -
Icy
Administrateur
Membre # 871

 Avatar du membre
Lieu : Bxl

Messages :
16590 (5.88 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 :
9395 (3.17 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]
----------
Barton 2600+| MSI K7N2 DELTA L| 1Go DDR400| Maxtor 160Go| Maxtor 60Go| LG GSA-4165B| Liteon LTD16X6S| LeadTek A280LE TD| SBLive! 1024| Logitech QuickCam Web| MICROSOFT Natural Ergonomic 4000| Logitech Cordless Optical Mouse| SAMSUNG SyncMaster 206BW

Nikon COOLPIX 5900 + Kingston Ultimate 120x 2GB | Canon PIXMA IP4000 | ADSL 100% Neuf Box

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 :
792 (0.39 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 :
9395 (3.17 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
----------
Barton 2600+| MSI K7N2 DELTA L| 1Go DDR400| Maxtor 160Go| Maxtor 60Go| LG GSA-4165B| Liteon LTD16X6S| LeadTek A280LE TD| SBLive! 1024| Logitech QuickCam Web| MICROSOFT Natural Ergonomic 4000| Logitech Cordless Optical Mouse| SAMSUNG SyncMaster 206BW

Nikon COOLPIX 5900 + Kingston Ultimate 120x 2GB | Canon PIXMA IP4000 | ADSL 100% Neuf Box

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 :
16590 (5.88 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 :
9395 (3.17 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()
----------
Barton 2600+| MSI K7N2 DELTA L| 1Go DDR400| Maxtor 160Go| Maxtor 60Go| LG GSA-4165B| Liteon LTD16X6S| LeadTek A280LE TD| SBLive! 1024| Logitech QuickCam Web| MICROSOFT Natural Ergonomic 4000| Logitech Cordless Optical Mouse| SAMSUNG SyncMaster 206BW

Nikon COOLPIX 5900 + Kingston Ultimate 120x 2GB | Canon PIXMA IP4000 | ADSL 100% Neuf Box

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 :
16590 (5.88 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-2006

Valid XHTML 1.0 Transitional

Page générée en 0.129 secondes