Programmation en C
Résolu
SeKoYa
Messages postés
152
Date d'inscription
Statut
Membre
Dernière intervention
-
SeKoYa Messages postés 152 Date d'inscription Statut Membre Dernière intervention -
SeKoYa Messages postés 152 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Programmation en C
- Application de programmation - Guide
- Mettre en veille un programme - Guide
- Programmer en basic sous windows 10 - Télécharger - Édition & Programmation
- Un autre programme est en cours d'installation - Forum Windows 10
- Programmation envoi sms - Guide
8 réponses
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
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 ??
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;
}
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
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.
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; }
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.
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()
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 ;)
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 ;-)
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>
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"); }
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.