Programmation en C
Résolu/Fermé
SeKoYa
Messages postés
152
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 août 2010
-
27 déc. 2008 à 14:33
SeKoYa Messages postés 152 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 13 août 2010 - 1 janv. 2009 à 20:45
SeKoYa Messages postés 152 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 13 août 2010 - 1 janv. 2009 à 20:45
Bonjour à tous,
Le père Noël est passé chez moi récemment et m'a apporté l'excellent livre "Le langage C, Norme ANSI, 2ème édition" de Brian W. Kernighan et Dennis M. Ritchie.
J'avais déjà commencé à coder des petites logiciels en C et je souhaiterai vraiment approfondir mes connaissances.
Seulement voilà, les codes sources utiilisés dans le livre ne passe marche pas dans mon compilateur (Dev C/C++).
J'ai lu que les codes donnés dans ce livre son sous forme de C pour système UNIX.
Voilà donc ma question : Avec quel outil pourrai-je coder en C à partir des exemples exact de ce livre ?
PS : Je suis sous Windows XP.
Merci par avance de vos réponses et bonnes fêtes de fin d'année à tous.
Le père Noël est passé chez moi récemment et m'a apporté l'excellent livre "Le langage C, Norme ANSI, 2ème édition" de Brian W. Kernighan et Dennis M. Ritchie.
J'avais déjà commencé à coder des petites logiciels en C et je souhaiterai vraiment approfondir mes connaissances.
Seulement voilà, les codes sources utiilisés dans le livre ne passe marche pas dans mon compilateur (Dev C/C++).
J'ai lu que les codes donnés dans ce livre son sous forme de C pour système UNIX.
Voilà donc ma question : Avec quel outil pourrai-je coder en C à partir des exemples exact de ce livre ?
PS : Je suis sous Windows XP.
Merci par avance de vos réponses et bonnes fêtes de fin d'année à tous.
A voir également:
- Programmation en C
- Application de programmation - Guide
- Mettre en veille un programme - Guide
- Programmation logo tortue télécharger - Télécharger - Études & Formations
- Ce programme est écrit en python ✓ - Forum Python
8 réponses
so0-class17
Messages postés
11
Date d'inscription
jeudi 1 janvier 2009
Statut
Membre
Dernière intervention
4 janvier 2009
3
1 janv. 2009 à 00:12
1 janv. 2009 à 00:12
essaye avec codblocks dev-c/++ est tres vieux
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
27 déc. 2008 à 14:36
27 déc. 2008 à 14:36
Salut,
Si tu n'as pas envie d'installer Linux, tu peux télécharger cygwin et utiliser le paquet gcc.
Comme ça tu auras un shell "comme si" t'étais sur linux. Et tes exemples marcheront.
Ceci dit, je suis surpris que ton code ne marche pas sur ton compilateur, car si tu respectes la norme ça doit marcher.
Quels sont les bibliothèques utilisés d'un programme qui ne marche pas sur ton compilateur ?
Cdlt
Si tu n'as pas envie d'installer Linux, tu peux télécharger cygwin et utiliser le paquet gcc.
Comme ça tu auras un shell "comme si" t'étais sur linux. Et tes exemples marcheront.
Ceci dit, je suis surpris que ton code ne marche pas sur ton compilateur, car si tu respectes la norme ça doit marcher.
Quels sont les bibliothèques utilisés d'un programme qui ne marche pas sur ton compilateur ?
Cdlt
SeKoYa
Messages postés
152
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 août 2010
18
27 déc. 2008 à 14:42
27 déc. 2008 à 14:42
Merci de ta réponse si rapide fiddy,
J'ai déjà quelques notions en C mais j'ai voulu tout reprendre à zéro et dès que j'ai voulu afficher ne serai-ce que "Hello World" il a fallut que je change le code qui était dans le livre pour pouvoir l'exécuter sous Dev C/C++.
Donc à ton avis, je lance cygwin et son paquet gcc et je pourrais faire du C à la norme ANSI sans aucune modification du code original ??
J'ai déjà quelques notions en C mais j'ai voulu tout reprendre à zéro et dès que j'ai voulu afficher ne serai-ce que "Hello World" il a fallut que je change le code qui était dans le livre pour pouvoir l'exécuter sous Dev C/C++.
Donc à ton avis, je lance cygwin et son paquet gcc et je pourrais faire du C à la norme ANSI sans aucune modification du code original ??
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
27 déc. 2008 à 14:54
27 déc. 2008 à 14:54
Oui, mais t'as pas besoin. Que tu compiles sous windows, sous linux ou autre, si tu respectes la norme ANSI, ça doit marcher. Il y a sûrement une autre explication ;)
Donne le code du hello world pour voir.
Donne le code du hello world pour voir.
SeKoYa
Messages postés
152
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 août 2010
18
27 déc. 2008 à 15:00
27 déc. 2008 à 15:00
Voici le code à la norme ANSI du livre :
#include<stdio.h>
main()
{
printf("bonjour, maître\n");
}
Et voici le code que je doit taper dans Dev C/C++ pour avoir le résultat attendu :
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf("bonjour, maître\n");
system("PAUSE");
return 0;
}
#include<stdio.h>
main()
{
printf("bonjour, maître\n");
}
Et voici le code que je doit taper dans Dev C/C++ pour avoir le résultat attendu :
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf("bonjour, maître\n");
system("PAUSE");
return 0;
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
27 déc. 2008 à 15:08
27 déc. 2008 à 15:08
Ouh là, vraiment étrange que ce bouquin mentionne ça.
C'est mieux de mettre int main(void) ou int main(int argc, int **argv);
D'ailleurs la norme C99 interdit le void main() ou main().
Le code respectant la norme du hello world est :
Si t'as pas vu puts, tu peux mettre printf("bonjour\n"); C'est la même chose ;).
Même avec cygwin (gcc), tu auras le warning ;)
Donc utilse plutôt int main(void) et passe à la suite du livre en utilisant toujours devC++ ;)
C'est mieux de mettre int main(void) ou int main(int argc, int **argv);
D'ailleurs la norme C99 interdit le void main() ou main().
Le code respectant la norme du hello world est :
#include <stdio.h> int main(void) { puts("bonjour"); return 0; }
Si t'as pas vu puts, tu peux mettre printf("bonjour\n"); C'est la même chose ;).
Même avec cygwin (gcc), tu auras le warning ;)
Donc utilse plutôt int main(void) et passe à la suite du livre en utilisant toujours devC++ ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
SeKoYa
Messages postés
152
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 août 2010
18
27 déc. 2008 à 15:12
27 déc. 2008 à 15:12
OK merci mais je pense que au fur et à mesure je vais devoir trouver des combinaisons différentes.
Encore merci et bonnes fêtes de fin d'années.
Encore merci et bonnes fêtes de fin d'années.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 déc. 2008 à 16:06
27 déc. 2008 à 16:06
Salut,
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf("bonjour, maître\n");
system("PAUSE");
return 0;
}
Même le Dev C/C++ est trop bavard, comme quoi il ne faut pas se fier à tout se qu'on voit écrit.
Pas besoin de stdlib.h pour faire un printf et un system("PAUSE")
argc et argv ne sont d'aucune utilité non plus puisque tu ne passe pas d'arguments à ton programme.
Donc en Dev C++ tu dois taper seulement
Pour tous les codes de ton livre mets int main et ajoute un return 0; à la fin de main
Bref, un main a cette forme
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf("bonjour, maître\n");
system("PAUSE");
return 0;
}
Même le Dev C/C++ est trop bavard, comme quoi il ne faut pas se fier à tout se qu'on voit écrit.
Pas besoin de stdlib.h pour faire un printf et un system("PAUSE")
argc et argv ne sont d'aucune utilité non plus puisque tu ne passe pas d'arguments à ton programme.
Donc en Dev C++ tu dois taper seulement
#include <stdio.h> int main() { printf("bonjour, maître\n"); system("PAUSE"); return 0; }Une bonne habitude reste de mettre int main ce qui permettra d'avoir un code de retour du programme principal.
Pour tous les codes de ton livre mets int main et ajoute un return 0; à la fin de main
Bref, un main a cette forme
int main() { /* déclaration variables */ /* instructions */ return 0; }ou
int main(int argc, char **argv) { /* déclaration variables */ /* instructions */ return 0; }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
27 déc. 2008 à 16:09
27 déc. 2008 à 16:09
Pas besoin de stdlib.h pour faire un printf et un system("PAUSE")
Si, pour un system, tu as besoin de stdlib. Je te mets le man (sans rancune hein :d)
C'est pour ça que c'est conseillé de mettre un simple getchar(), et en plus c'est beaucoup plus performant.
Si, pour un system, tu as besoin de stdlib. Je te mets le man (sans rancune hein :d)
NOM system - Exécuter une commande shell SYNOPSIS #include <stdlib.h> int system(const char *commande);
C'est pour ça que c'est conseillé de mettre un simple getchar(), et en plus c'est beaucoup plus performant.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
27 déc. 2008 à 16:25
27 déc. 2008 à 16:25
Re,
Si, on parle de system("PAUSE") alors je suppose qu'on parle d'windows
1. pas de man system sous windows
2. pas besoin de stdlib.h pour compiler system("PAUSE") (si je ne teste pas je le dis, mais j'ai testé avant de le dire ;-)
Sans rancune aussi ;-))
Je suis d'accord que pour la portabilité il faut utiliser getchar()
Si, on parle de system("PAUSE") alors je suppose qu'on parle d'windows
1. pas de man system sous windows
2. pas besoin de stdlib.h pour compiler system("PAUSE") (si je ne teste pas je le dis, mais j'ai testé avant de le dire ;-)
Sans rancune aussi ;-))
Je suis d'accord que pour la portabilité il faut utiliser getchar()
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
27 déc. 2008 à 16:45
27 déc. 2008 à 16:45
Non non ;)
system fait parti du C standard. Ca va créer une nouvelle fenêtre (si besoin), et envoyer la chaîne "PAUSE", à la fenêtre créé qui sera interprété par l'OS (sans compter des allocations mémoires :d). Et PAUSE sera lu et interprété par Windows. Mais system fait partie du C, et a besoin de la bibliothèque stdlib.h. Après sous devC++, tu n'as pas de message d'erreur tout simplement car c'est un Warning tout comme le malloc en cas d'oubli de stdlib.h. Mais il faut quand même rajouter la bibliothèque ;)
system fait parti du C standard. Ca va créer une nouvelle fenêtre (si besoin), et envoyer la chaîne "PAUSE", à la fenêtre créé qui sera interprété par l'OS (sans compter des allocations mémoires :d). Et PAUSE sera lu et interprété par Windows. Mais system fait partie du C, et a besoin de la bibliothèque stdlib.h. Après sous devC++, tu n'as pas de message d'erreur tout simplement car c'est un Warning tout comme le malloc en cas d'oubli de stdlib.h. Mais il faut quand même rajouter la bibliothèque ;)
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
27 déc. 2008 à 16:54
27 déc. 2008 à 16:54
Alors ce code ne devrait pas fonctionner
En ce qui concerne le prototype de la fonction system elle se trouve bien en stdlib.h
Je suis d'accord sur ce point.
Donc vaut mieux utiliser getchar() comme tu le dis. Gagne en portabilité et aussi pas besoin d'ajouter un header inutile
Il reste argc et argv ;-)
#include<stdio.h> main() { printf("bonjour\n"); system("PAUSE"); }Pourtant il fonctionne puisque la déclaration est implicite.
En ce qui concerne le prototype de la fonction system elle se trouve bien en stdlib.h
Je suis d'accord sur ce point.
Donc vaut mieux utiliser getchar() comme tu le dis. Gagne en portabilité et aussi pas besoin d'ajouter un header inutile
Il reste argc et argv ;-)
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
27 déc. 2008 à 17:07
27 déc. 2008 à 17:07
Pour le warning, il n'y a pas, sauf si tu le demande explicitement
Mais tu as raison, il faut utiliser #include<stdlib.h>
lami20j@debian:~/src/c$ cat main.c #include<stdio.h> main() { printf("bonjour\n"); system("echo rebonjour"); } lami20j@debian:~/src/c$ gcc main.c lami20j@debian:~/src/c$ ./a.out bonjour rebonjour lami20j@debian:~/src/c$ gcc -W -Wall main.c main.c:3: warning: return type defaults to 'int' main.c: In function 'main': main.c:5: warning: implicit declaration of function 'system' main.c:6: warning: control reaches end of non-void function
Mais tu as raison, il faut utiliser #include<stdlib.h>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 déc. 2008 à 16:20
27 déc. 2008 à 16:20
Re,
Tu dois peut être te demander pourquoi utiliser int comme retour pour main et pas seulement main ou void main.
En fait une valeur de retour du programme principal peut être d'une grande utilité pour débogage.
A moins que Kernighan & Ritchie se sont trompé, main() est bien la norme ANSI, ce qui nous peut faire croire que les compilateurs ne respectent pas la norme.
gcc donne un warning seulement si on mets void main mais le programme est bien compilé.
gcc ne donne pas un warning si on mets main()
Toutefois fois c'est bien de prendre l'habitude int main(), ce qui ne veut pas dire pour le moment que c'est la norme ansi qui oblige.
Exemple avec void main() - warning, mais le programme est compilé
Sur dev c++ j'ai compilé sans problèmes ou warning ce code et ça marche
Tu dois peut être te demander pourquoi utiliser int comme retour pour main et pas seulement main ou void main.
En fait une valeur de retour du programme principal peut être d'une grande utilité pour débogage.
A moins que Kernighan & Ritchie se sont trompé, main() est bien la norme ANSI, ce qui nous peut faire croire que les compilateurs ne respectent pas la norme.
gcc donne un warning seulement si on mets void main mais le programme est bien compilé.
gcc ne donne pas un warning si on mets main()
Toutefois fois c'est bien de prendre l'habitude int main(), ce qui ne veut pas dire pour le moment que c'est la norme ansi qui oblige.
Exemple avec void main() - warning, mais le programme est compilé
lami20j@debian:~/src/c$ cat main.c #include<stdio.h> void main() { printf("bonjour\n"); } lami20j@debian:~/src/c$ gcc main.c main.c: In function 'main': main.c:3: warning: return type of 'main' is not 'int' lami20j@debian:~/src/c$ ./a.out bonjourExemple avec main() - pas de warning
lami20j@debian:~/src/c$ cat main.c #include<stdio.h> main() { printf("bonjour\n"); } lami20j@debian:~/src/c$ gcc main.c lami20j@debian:~/src/c$ ./a.out bonjour
Sur dev c++ j'ai compilé sans problèmes ou warning ce code et ça marche
#include<stdio.h> main() { printf("bonjour\n"); system("PAUSE"); }
SeKoYa
Messages postés
152
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 août 2010
18
31 déc. 2008 à 20:55
31 déc. 2008 à 20:55
Re,
Merci à tous pour toutes vos réponses,
Je viens de m'apercevoir que quelque chose bloque n'importe quelle exécution : après chaque compilation, l'exécution ne se produit pas et il apparaît, dans tous les programmes que j'écris, ceci :
https://imageshack.com/
Là, je commence à être un peu déconcerté ...
Si ces 2 lignes veulent dire quelque chose, merci de me le faire savoir parce que là, je ne peux même plus afficher un "Hello World" dans la console windows, peut-être faudrait-il que je change de compilateur ?? Donnez moi celui que vous utilisez à ce moment-là.
PS : Bonne Année à tous.
Merci à tous pour toutes vos réponses,
Je viens de m'apercevoir que quelque chose bloque n'importe quelle exécution : après chaque compilation, l'exécution ne se produit pas et il apparaît, dans tous les programmes que j'écris, ceci :
https://imageshack.com/
Là, je commence à être un peu déconcerté ...
Si ces 2 lignes veulent dire quelque chose, merci de me le faire savoir parce que là, je ne peux même plus afficher un "Hello World" dans la console windows, peut-être faudrait-il que je change de compilateur ?? Donnez moi celui que vous utilisez à ce moment-là.
PS : Bonne Année à tous.
SeKoYa
Messages postés
152
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 août 2010
18
1 janv. 2009 à 20:45
1 janv. 2009 à 20:45
Bon, tout d'abord merci à tous pour votre aide précieuse.
J'ai enfin solutionné mon problème : j'ai abandonné Dev C/C++ et je suis passé à code::blocks qui est d'ailleurs beaucoup plus lisible et ergonomique.
Bonne Année 2009 à tous.
J'ai enfin solutionné mon problème : j'ai abandonné Dev C/C++ et je suis passé à code::blocks qui est d'ailleurs beaucoup plus lisible et ergonomique.
Bonne Année 2009 à tous.