Différence entre définition et déclaration de fonction en C

mickmac Messages postés 415 Date d'inscription   Statut Membre Dernière intervention   -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Voilà tout est dans la question, pouvez vous me dire la différence entre déclaration et définition Si vous avez des exemples simples pour me permettre d'encore mieux me faire comprendre c'est pas de refus

Merci


A voir également:

3 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Dans la déclaration on ne met que le prototype, sans mettre le code, ça permet de savoir que la fonction existe(ra), ce qui permet de l'utiliser même si la fonction est définie ailleurs dans le code.

Dans la définition on spécifie ce que fait la fonction, avec le code complet.

Remarque : on peut faire plusieurs fois la déclaration, mais la définition doit être unique, sinon ça n'a plus de sens.

Exemple :

int f(int n); // déclaration

int g(int n) {// définition
	return (n<0) ? 1 : f(n-2)+g(n-1);
}

int f(int n) { // définition
	return (n<0) ? 1 : f(n-1)*g(n-2);
}
3
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Dans la déclaration on ne met que le prototype, sans mettre le code, ça permet de savoir que la fonction existe(ra), ce qui permet de l'utiliser même si la fonction est définie ailleurs dans le code.
Pas forcément. On peut faire une déclaration sans prototype.
0
mickmac Messages postés 415 Date d'inscription   Statut Membre Dernière intervention   6
 
Merci bien
ok et donc dans un main on n'utilise que la déclaration alors si on mets la définition de la fonction après le main C'est ça?

Et si on définit que l'on veut utilisé avant le main, c'est pas la peine de redéclarer la fonction est juste?


Et jute une autre question si je fait un tableau [20] que l'utilisateur va remplir grâce au scantf,
il faut bien que je fasse
for (i=0;i<20;i++)
ou j'ai scanf("%d",&tableau[i])

Il faut bien que je mets le & n'est ce pas?
Et comment dois je écrire pour obtenir le même principe avec getchar ??



Merci encore
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
ok et donc dans un main on n'utilise que la déclaration alors si on mets la définition de la fonction après le main C'est ça?

Et si on définit que l'on veut utilisé avant le main, c'est pas la peine de redéclarer la fonction est juste?

Yes. Il faut que la fonction soit déclarée au moment de l'appel (peu importe qu'elle soit définie).

Il faut bien que je mets le & n'est ce pas?
Oui. &tableau[i] signifie l'adresse mémoire de la variable tableau[i]. Ce qui peut s'écrire également : tableau+i (sans &).

Et comment dois je écrire pour obtenir le même principe avec getchar ??
tableau[i]=getchar();
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
ok et donc dans un main on n'utilise que la déclaration alors si on mets la définition de la fonction après le main C'est ça?

Et si on définit que l'on veut utilisé avant le main, c'est pas la peine de redéclarer la fonction est juste?

Quel charabiat ! Chapeau fiddy si tu as compris ce qu'il veux dire.
Dans la fonction main, il n'y a ni déclaration ni définition de fonction, juste des utilisations. Pour utiliser une fonction dans le corps de n'importe quelle autre fonction (main compris) il faut quelle soit déclarée avant, en dehors du corps de la fonction. La définition, tu la mets là où tu veux, après, avant ou mieux dans un autre fichier.
0
mickmac Messages postés 415 Date d'inscription   Statut Membre Dernière intervention   6
 
une dernière question pourquoi quand j'écrit se programme ça très marche bien alors que je croyais que si on voulais remplir n notes il fallait un tableau de taille n+1 à cause du \0 à la fin qui perd une casse.


int main()
{
int n=0;
int som=0;
float moy=0;
printf("combien avez vous de notes?\n");
scanf("%d",&n);
int notes[n];
int i=0;
for(i=0;i<n;i++)
{
printf("entrez votre note \n");
scanf("%d",¬es[i]);
}
for (i=0;i<n;i++)
{
som=som+notes[i];
}
moy=som/n;
printf("la moyenne est %f",moy);
return 0;
}
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
le\0 c'est juste pour les chaines de caractère. Là c'est des entiers (d'ailleurs, il est impossible de connaître sa taille, car il n'y a pas de valeur de fin, ce qui n'aurai pas de sens en int).
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
'\0' est un caractère, là tu parles de tableau d'entiers !
0