Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

les modules en C

8 réponses
Avatar
programmation
Bonjour,

Je veux organiser mon programme C avec Visual studio en des modules
*.h et *.c

Aussi, j'ai deux modules o=F9 chacun contient des fonctions qui aussi
appellent d'autres fonctions.
le module "traitement.h" doivent me retournent trois valeurs a, b et c
alors je fais les passer par adresse.

Je ne sais pas c'est l'organisation suivante est correcte ou non ?

Le programme principal "main.c" est :
Code : C
include <stdio.h">
include "traitement.h"
include "test.h"

int main()
{
int a=3D0,b=3D0,c=3D0;
.........
.........
test();
.......
traitement(&a,&b,&c);
printf("%d %d % d",a,b,c);

return 0;

}




le code de "traitement .h" est :
Code : C

int fonction4()
{
.......
.......
// calcul
....
return a;
}

int fonction5()
{
.......
.......
// calcul
....
return b;
}

int fonction6()
{
.......
.......
// calcul
....
return c;
}

int fonction1()
{
.......
.......
a =3D fonction4();
return a;
}

int fonction2()
{
.......
.......
b =3D fonction5();
return b;
}

int fonction3()
{
.......
.......
c =3D fonction6();
return c;
}
int traitement(a,b,c)
int a,b,c;
{
....
...
a =3D fonction1();
b =3D fonction2 ();
c =3D fonction3 ();

return 0;
}



Le code de "test.h" esr :
Code : C

void afficher ()
{
.......
.......
printf("..........");

return 0;
}

float calcul ()
{
....
cal =3D ...
return cal;
}

int test()
{
float tot =3D 0;

tot =3D calcul();
afficher();

return 0;
}


Qu'est ce que je mis dans les *.c et les *.h ?

J'ai besoin de vos aides pour que je puisse organiser mon programme C.

Merci.

8 réponses

Avatar
marc
programmation a écrit :

le code de "traitement .h" est :
Code : C

int fonction4()
{
.......
.......
// calcul
....
return a;
}



Dans les .h, il ne faut mettre que les declarations des fonctions
(dont le code - la definition - est dans les .c correspondants)..
Avatar
programmation
On 4 août, 12:58, marc wrote:
programmation a écrit :

> le code de "traitement .h" est :
> Code : C

> int fonction4()
> {
> .......
> .......
> // calcul
> ....
> return a;
> }

Dans les .h, il ne faut mettre que les declarations des fonctions
(dont le code - la definition - est dans les .c correspondants)..



merci.
J'ai mis les prototypes dans "*.h" et le code dans "*.c".
Mais, j'ai beaucoup des fonctions imbriquées dans le module alors dans
quel ordre je vais mettre les prototypes et le code de chaque fonction
dans "*.h" et "*.c" ?
Avatar
marc
programmation a écrit :

J'ai mis les prototypes dans "*.h" et le code dans "*.c".
Mais, j'ai beaucoup des fonctions imbriquées dans le module alors dans
quel ordre je vais mettre les prototypes et le code de chaque fonction
dans "*.h" et "*.c" ?



il n'y a pas d'ordre.
chaque .c inclus chaque .h correspondant , avec "extern" si besoin :
http://tigcc.ticalc.org/doc/keywords.html#extern
Avatar
programmation
On 6 août, 14:32, marc wrote:
programmation a écrit :

> J'ai mis les prototypes dans "*.h" et le code dans "*.c".
> Mais, j'ai beaucoup des fonctions imbriquées dans le module alors dan s
> quel ordre je vais mettre les prototypes et le code de chaque fonction
> dans "*.h" et "*.c" ?

il n'y a pas d'ordre.
chaque .c inclus chaque .h correspondant , avec "extern" si besoin :http: //tigcc.ticalc.org/doc/keywords.html#extern



Bonjour,

Je parle de l'ordre dans le fichier *.h.
Si on a plusieurs fonctions dans le *.h par exemple de fonctions
imbriquées et des fonctions appellent d'autres fonctions.
Vous pouvez voir les fonctions au dessus.
donc quel est l'ordre de déclaration de prototype de ces fonctions ?

Merci.
Avatar
PYT
> donc quel est l'ordre de déclaration de prototype de ces fonctions ?


Je crois que cela a déjà été dit : "Tu ne t'en préoccupe pas"

PYT
Avatar
programmation
On 7 août, 10:07, PYT wrote:
> donc quel est l'ordre de déclaration de prototype de ces fonctions ?

Je crois que cela a déjà été dit : "Tu ne t'en préoccupe pas"

PYT



Bonjour,

Je voulais utiliser des modules dans mon programme pour le
réutilisation de ces modules et la lisibilité du programme.

J'ai fait un petit exemple pour voir le syntaxe, la déclaration et la
définition est correcte ou non.

Ce programme permet de calculer la somme et le produit de deux
entiers.
Voici le module "calcul.h"

#ifndef __CALCUL_H
#define __CALCUL_H

int somme(int a, int b);
int multiplication(int a, int b);
void calcul();

#endif //__CALCUL_H



Voici le module "calcul.c"

#include <conio.h>
#include <stdio.h>
#include "calcul.h"

int somme(int a, int b) {return a+b;}
int multiplication(int a, int b) {return a*b;}

void calcul()
{
int a,b, c,d;
printf("donner a=");
scanf("%d",&a);
printf("ndonner b =");
scanf("%d",&b),
c=somme(a,b);
d= multiplication(a,b);
printf("n c=%d et d=%d",c,d);
getch();
return 0;
}




Voici le programme principal "main.c"

#include <conio.h>
#include <stdio.h>
#include "calcul.h"

void main()
{
printf("le calcul commencen");
calcul();
printf("fin de calcul n");
getch();
return 0;
}



Ce programme marche.

J'ai remarqué même si je copie le contenu de "calcul.c" dans
"calcul.h"j'utilise seulement "calcul.h" alors le programme s'exécute
bien.

Voici cette version sans "calcul.c" :

Le module "calcul.h" est :

#include <conio.h>
#include <stdio.h>

int somme(int a, int b) {return a+b;}
int multiplication(int a, int b) {return a*b;}

void calcul()
{
int a,b, c,d;
printf("donner a=");
scanf("%d",&a);
printf("ndonner b =");
scanf("%d",&b),
c=somme(a,b);
d= multiplication(a,b);
printf("n c=%d et d=%d",c,d);
return 0;
}


#include <conio.h>
#include <stdio.h>
#include "calcul.h"

Le programme "main.c" est :
void main()
{
printf("le calcul commencen");
calcul();
printf("fin de calcul n");
return 0;
}



Donc, pourquoi on utilise dans la programmation modulaire les fichiers
"*.c" ?

Comment on écrit ce programme de manière correcte suivant le principe
de la programmation modulaire ?

Avez-vous autre solution ou proposition ?

Merci.
Avatar
marc
programmation a écrit :
J'ai remarqué même si je copie le contenu de "calcul.c" dans
"calcul.h"j'utilise seulement "calcul.h" alors le programme s'exécute
bien.

Donc, pourquoi on utilise dans la programmation modulaire les fichiers
"*.c" ?




C'est la base du C et des normes C89, C99,...,
sur lesquelles sont basés les compilos.
Lis le K&R pour avoir les bases.
Avatar
programmation
On 13 août, 13:46, marc wrote:
programmation a écrit :

> J'ai remarqué même si je copie le contenu de "calcul.c" dans
> "calcul.h"j'utilise seulement "calcul.h" alors le programme s'exécute
> bien.

> Donc, pourquoi on utilise dans la programmation modulaire les fichiers
> "*.c" ?

C'est la base du C et des normes C89, C99,...,
sur lesquelles sont basés les compilos.
Lis le K&R pour avoir les bases.



Bonjour,

J'ai utilise dans mon programme principal "main.c deux modules :
- "calcul.c" et "calcul.h"
- "traitement.c" et "traitement.h"
Est ce que je compile les modules puis le programme principal ou bien
le programme principal seulement ?
Est ce que je lance l'exécution à partir le programme principal ?

J'ai compilé les les modules puis le programme principal puis j'ai
lancé l'exécution à partir le programme principal.
Le programme marche bien. Mais, j'ai deux warning:

warning C4013: 'calcul' non défini(e) ; extern retournant int pris par
défaut
warning C4013: 'traitement' non défini(e) ; extern retournant int pris
par défaut

Comment on va résoudre ceci ?

J'ai mis dans "main.c"

#include "calcul.h"
#include "traitement.h"

J'ai mis dans "calcul.c"

#include "calcul.h"

J'ai mis dans "traitement.c"
#include "traitement.h"

le programme principal "main.c" est :

#include <stdio.h>
#include "calcul.h"
#include "traitement.h"
int main ()
{
.... ...
calcul ( );
traitement ();
........
return 0 ;
}



le module "calcul.h" est :

#ifndef__CALCUL_H
#define__CALCUL_H

//les prototypes des fonctions
...

#endif



le module "traitement.h" est :

#ifndef__TRAITEMENT_H
#define__TRAITEMENT_H

//les prototypes des fonctions
...
#endif



le module "calcul.c" est :

int calcul ()
{
.......
.......

return 0 ;
}


le module "traitement.c" est :

int traitement ()
{
.........
..........
return 0;
}


Merci.