Pb: Programmation Creation Fichier Source

Résolu/Fermé
Louys77 Messages postés 2 Date d'inscription mercredi 6 octobre 2010 Statut Membre Dernière intervention 7 octobre 2010 - 6 oct. 2010 à 21:45
overcode Messages postés 119 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 21 octobre 2011 - 7 oct. 2010 à 21:14
Bonjour,

Je suis un debutant en programmation.
J'espere qu'il n'y a pas deja un post sur ce sujet, mais j'ai bien regarde avant de le creer.

Je travaille sur les IDE CodeBlocks et Xcode.
Je cherche juste a creer un autre ficher source que le main.c

Au debut, pas de probleme, je le cree sous le nom de untitled.c. Je l'enregistre et le mets dans le projet (il y a meme le fichier untitled.h) .

J'ecris le code ci-dessous:

#include "untitled.h"
#include <stdio.h>

int untitled (int argc, const char * argv[])
{
printf("Hello, Boy!\n");
return 0;
}

... Et rien ne s'affiche a l'ecran. Pourquoi?...

Je ne comprends pas, et cela fait 2 semaines que je reflechis decu.
Je ne pense pas que cela soit du a un probleme d'installation, car les 2 IDE ne m'affichent rien.
Je pense que c'est tout simplement une erreur d'ecriture, ou de manip.
Mais je ne vois pas quoi...

Pourriez-vous m'aider?

Merci d'avance!

PS: j'ai supprime les accents car je me suis rendu compte que, sur certaines pages, ils etaient remplaces par des caracteres, rendant le texte plus difficile a lire...
Ne pensez pas que je suis nul en orthographe! :)
Mais il peut toujours y avoir des fautes d'orthographes... -.-"

3 réponses

overcode Messages postés 119 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 21 octobre 2011 27
Modifié par overcode le 7/10/2010 à 02:01
Bonsoir,

C'est normal que rien ne s'affiche :D Vérifie bien que ton projet est un projet console ! A part ça, au vu de ce que tu as mis, il te faut quelques éclaircissements ... et j'espère que tu as consulté quelques sites ou lu quelques livres parlant du C, et que tu sais au moins ce que c'est une fonction !!! sinon ce que je t'écris ici ne servira à rien :) Comme la question m'a souvent été posée, je vais m'y atteler :


A propos de la fonction main :
Main signifie 'principal' en anglais. C'est le point d'entrée principal d'un programme écrit en C. Parce qu'il faut bien commencer à exécuter le programme à partir d'un point :) et c'est la fonction main. C'est un nom standard que l'on retrouve (presque) partout.
Le compilateur s'attend à trouver une fonction portant ce nom : s'il n'en trouve pas il te le signalera par des messages d'erreurs.


A propos du fichier main.c :
C'est PAS parce qu'il contient la méthode main qu'il doit s'appeler main.c !! Tu peux aussi bien renommer ton fichier en pied.c ou tete.c (j'ai pas trop d'inspiration en ce moment xD). Par convention, on préfère nommer le fichier contenant la fonction main par main.c.


A propos de la programmation/compilation modulaire :
ou quand on veut avoir plusieurs fichiers sources qui composent le programme : c'est généralement quand le programme est assez complexe et devient très grand que l'on a recours (parfois on est obligé) de découper le code en plusieurs parties, chacune dans un fichier source.
Attention : on ne crée pas de nouveaux points d'entrée ! Le programme en C, qu'il soit composé d'un fichier main.c ou de 5000 fichiers ".c" débutera toujours son exécution à partir de la fonction main !


Que met-on dans les fichiers .c supplémentaires ?
On définit les fonctions dont on a besoin. Le nom du fichier importe peu, mais il faut quand même un minimum d'organisation sinon même toi tu pourrais ne plus te retrouver au milieu de tes fichiers :D Je prends un exemple très naze de fonction :
void coucou() 
{ 
    printf("Coucou toi ! C'est moi, ton ordinateur, qui te parle :)\n") ; 
}
Remarque, c'est pas obligé que ta fonction ressemble à main (avec des int et des const char *)


Il sort d'où le fichier .h ?
Tu découpes ton programme en fichiers sources contenant des fonctions. Tiens prenons la fonction coucou dans le fichier coucou.c. Quand tu voudras l'utiliser, disons, dans main.c, le compilateur se mettra à gueuler et ne voudras de la fonction coucou.

C'est quoi le problème ? c'est comme pour la fonction printf : pour l'utiliser tu fais signe au compilo en rajoutant la ligne :
# include <stdio.h>
Et là après tu peux utiliser printf (et plein d'autres ...)

Les fichiers ".h" (pour header, en-tête en anglais), ne contiennent pas de code mais des déclarations de fonctions. Une déclaration tu dis ? oui, c'est très court et ça signale au compilateur qu'il "existe ailleurs" des fonctions (c'est à dire dans d'autres fichiers C ou dans des bibliothèques) et à quoi "ressemblent" ces fonctions. C'est le cas de printf avec stdio.h.

Tiens, pour la fonction coucou, le fichier .h correspondant se nommerait par exemple coucou.h et contiendrait cela (juste une ligne) :
void coucou() ;

Par la suite, si tu veux utiliser la fonction coucou, faudra faire comme avec printf et stdio.h, mais en très légèrement différent. Tu rajouteras une ligne dans main.c par exemple, si c'est là où tu comptes utiliser coucou.
# include "coucou.h"
Tu remarqueras le signe " " (double quote) au lieu des chevrons < >


Un exemple :
Tiens, on va coder un peu de politesse XD Le programme final doit être poli, dois savoir saluer et prendre congé.

Comme on ne va pas tout mélanger, la politesse on la codera dans un fichier .c séparé (avec le .h qui va avec). On se limitera à deux fonctions :
- salutations()
- prise_de_conge()

En tout, trois fichiers dans le projet :
- main.c : pour le programme principal
- politesse.c : pour nos deux fonctions de politesse
- politesse.h : l'en-tête qui déclare les fonctions de politesse

On y va :

politesse.h : (deux lignes, c'est tout !)
void salutations() ; 
void prise_de_conge() ;


politesse.c :
# include <stdio.h> 
# include "politesse.h" 

void salutations() 
{ 
    printf("Bonjour à vous ! Je suis enchanté de vous offrir mes services !\n") ; 
} 

void prise_de_conge() 
{ 
    printf("Au revoir cher utilisateur(trice) ! Je serais toujours disponible pour vous !\n") ; 
}


main.c :
# include <stdio.h> 
# include "politesse.h" 

int main(int argc, char * argv[]) 
{ 
    salutations() ; 

    prise_de_conge() ; 

    return 0 ; 
}



Voilà un programme assez bien élevé (codé XD) ! C'est très léger, juste pour l'exemple, j'ai omis pleins d'autres choses (directive préprocesseur pour les inclusions multiples, la procédure de compilation, ...)

Je te conseille pour débuter très gentiment : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c


J'espère que je t'ai éclairci un peu les idées :)
0
Louys77 Messages postés 2 Date d'inscription mercredi 6 octobre 2010 Statut Membre Dernière intervention 7 octobre 2010
7 oct. 2010 à 20:41
Bonjour,

Merci de votre réponse! J'ai bien trouvé le problème.

J'ai bien ouvert un projet console.
Par contre, je n'avais pas compris que la fonction main était "le point d'entrée principal d'un programme" et qu'il fallait écrire, dans cette dernière, l'autre fonction que l'on avait créée.

Dans mon cas, cela donne:

untitled.h
void untitled ();

untitled.c
#include <stdio.h>
#include "untitled.h"

void untitled ()
{
printf("Hello, Boy!\n");
}

main.c
#include <stdio.h>
#include "untitled.h"

int main(int argc, char * argv[])
{
untitled();
return 0 ;
}

Et cette fois-ci, ça marche!

Merci beaucoup pour votre réponse! Rapide et claire!

Très Cordialement

PS: c'était idiot de ne pas mettre les accents ^^
0
overcode Messages postés 119 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 21 octobre 2011 27
7 oct. 2010 à 21:14
Ravi d'avoir pu aider :)

Note : j'ai gardé le contenu des fichiers en-tête très léger, limite compilable. Sache qu'en vérité tu dois y mettre d'avantage de choses, comme les directives préprocesseur évitant l'inclusion multiple (ouais c'est du charabia !) En clair, rajouter dans le fichier .h des lignes au début et à la fin du genre :

politesse.h :
# ifndef POLITESSE_H
# define POLITESSE_H

void salutations() ; 
void prise_de_conge() ;

# endif


N'hésite pas si tu as d'autres questions :)
0