bonjour tout le monde,
je débute tout juste en programmation et je n'arrive pas à compiler mon premier programme, (afficher "Bonjour" à l'écran, je pense que vous devez connaître :-) ).
le code source du programme en question ( au cas ou je me suis trompé quelque part):
#include <stdio.h>
void main ()
{
puts ("bonjour");
getchar ();
return;
}
ensuite je tente de compiler avec gcc:
gcc -c /home/tonks/tryC/programme1.c
et ça me donne ceci:
:~$ gcc -c /home/tonks/tryC/programme1.c
/home/tonks/tryC/programme1.c: Dans la fonction « main »:
/home/tonks/tryC/programme1.c:4: attention : le type de retour de « main » n'est pas « int »
/home/tonks/tryC/programme1.c:8:2: attention : pas de retour chariot à la fin du fichier
Voila. Si j'ai bien compris le tutorial que j'utilise, je devrais normalement obtenir un fichier objet, mais ce n'est pas le cas.
Pourriez vous m'expliquer ce que tout cela veut dire, j'avoue que je suis "déja" largué, je n'arrive pas à savoir ou se trouve mon erreur.
Je vous remercie d'avance, j'espere que je ne raconte pas de bêtises et désolé si la question s'avère être stupide, je débute.
# 2 trucs :)
Posté par aurel (site web personnel, Mastodon) . Évalué à 5.
2. ajoute une ligne vide à la fin de ton fichier
Et hop, ca compile et ca tourne !
:)
[^] # Re: 2 trucs :)
Posté par berti . Évalué à 5.
return;
par
return 0;
ce qui voudra dire que ton programme s'est bien terminé.
[^] # Re: 2 trucs :)
Posté par Nicolas Schoonbroodt . Évalué à 8.
pour lancer ton fichier, qui a été compilé, il devrait se nommer programme1.o et se trouver dans le répertoire courant. Pour le lancer, il faut encore faire l'édition des liens, c'est a dire lier tous les fichier objets (facile, ici il n'y en a qu'un) ensembles pour créer un exécutable :
gcc programme1.o
cela crée un fichier a.out exécutable dans le répertoire courant, que tu peux lancer par
./a.out
Pour avoir un nom plus sympathique, tu peux essayer
gcc programme1.o -o programme1
qui te créera l'exécutable avec comme nom de fichier programme1 (./programme1 pour le lancer)
[^] # Re: 2 trucs :)
Posté par alf . Évalué à 0.
main DOIT retourner un int. Point. C'est la norme qui le définit très clairement. Un programme C contenant un main ne retournant pas un entier est incorrect. (je crois qu'en C++ c'est possible, mais en tout cas pas en C).
Ce qui peut changer, ce sont les paramètres de main: soit
int main(void)
si tu t'en fous des arguments, soit
int main(int argc, char *argv[])
si tu en as besoin, soit
int main ( /* autre chose */ )
si tu as envie d'utiliser des extensions fournies par ta plate-forme, mais non portables ("portable" au sens du C).
Les deux premières sont définies dans la norme, et fonctionneront sur toute implémentation du C (enfin, mis à part les cas des freestanding environments, mais on va passer pour l'instant); la troisième est implementation-defined et donc dépend de l'environnement. Par exemple, le
int main(int argc, char *argv[] char *env[])
est une extension commune, qui compilera et fonctionnera sur certaines implémentations, mais n'est pas portable.
Cela dit, un compilateur C a le droit de rejeter un programme définissant main comme retournant void.
Et, en passant, pour compiler un programme C avec GCC, une ligne de commande pour avoir les bons avertissements est
gcc -Wall [ -Wextra | -W ] [ -std=c99 [ -pedantic ]]
-Wextra est défini depuis la 4.0 je crois, avant c'était -W; et -std=c99 est utile (et même recommandé) pour s'assurer que ton code est correct au sens de la norme C99. Note que ce flag désactive certaines extensions (POSIX, GNU ou autres) qui entrent en conflit avec la norme, donc tu ne pourras pas forcément l'utiliser, suivant ce que tu veux faire. Le -pedantic retournant des avertissements supplémentaires de la norme, et rejete toute extension.
# et pourtant...
Posté par cxente . Évalué à 4.
Je fais ça :
$ gcc programme1.c
j'obtiens un a.out. Et avec les bonnes permissions (chmod u+x a.out) il peut être lancé :
$ ./a.out
bonjour
Pour sortir du programme control+c
Dans ton cas, tu utilises l'option -c (qui provoque une compilation partielle, et te donne un fichier objet en .o).
Alors vérifie avec un petit ls que tu n'as pas de nouveaux fichiers après compilation.
[^] # Re: et pourtant...
Posté par mrlem (site web personnel) . Évalué à 5.
Je peux me tromper, mais vu le code, un simple appui sur une touche ne suffit-il pas à sortir ? (cf. l'appel à getchar)
[^] # Re: et pourtant...
Posté par cxente . Évalué à 1.
N'importe quelle touche affiche la touche et "entr" redonne le prompt.
J'ai fait et dit "control+c" par habitude.
# J'y arrive.
Posté par tonks . Évalué à 1.
merci beaucoup pour votre coup de main, j'ai apporté les modifications que vous m'aviez conseillées et ça marche. Encore merci.
A+
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.