la fonction en mathématique la plus connue est y = f (x)
f étant ici la fonction.
en C le principe est le même.
On rappel que la fonction principale (qui permet de démarrer le programme) est:
int main (int argc, char **argv)
{
return EXIT_SUCCESS; /* retour de la fonction */
}
c'est la fonction minimale pour faire un code C
L'idée de découper en fonction est de découper les taches en sous tache..Et de pouvoir constituer des librairies.
Le prototype de la fonction lg_chaine est :
int lg_chaine(char *chaine);
qui va utiliser une boucle de comptage
ici la fonction est vu par gcc avant de voir le main ! donc pas besoin de présenter son prototype.
/********************************
* Projet : comptage de caractère
* Auteur : Bogt
* Date : 28/11/2022
********************************/
#include <stdlib.h>
#include <stdio.h>
/* fonction lg_chaine */
int lg_chaine(char *chaine)
{
int nb_lettre;
nb_lettre=0; /* pas de lettre au départ de la fonction */
printf ("%s \n",chaine);
while (chaine[nb_lettre]!=0) /* 0 ou '\0' */
{
nb_lettre=nb_lettre+1; /* on a une lettre en plus dans la chaine */
}
return nb_lettre; /* retour du nombre de lettre */
}
int main (int argc, char **argv)
{
int letter_number;
letter_number=lg_chaine ("Bonjour le monde");
printf ("on a %d lettre(s) ou espace(s) dans cette chaine\n",letter_number);
return EXIT_SUCCESS;
}
Avec Monia
le programme main (principal)
et sa fonction :
/********************************
* Projet : passage de chaine proto
* Auteur : Bogt
* Date : 28/11/2022
********************************/
#include <stdlib.h>
#include <stdio.h>
/* prototype de lg_chaine */
int lg_chaine(char *chaine);
/************* MAIN *****************************/
int main (int argc, char **argv)
{
int letter_number;
letter_number=lg_chaine ("Bonjour le monde");
printf ("on a %d lettre(s) ou espace(s) dans cette chaine\n",letter_number);
return EXIT_SUCCESS;
}
/************ Mes fonctions *********************/
/* fonction lg_chaine */
int lg_chaine(char *chaine)
{
int nb_lettre;
nb_lettre=0; /* pas de lettre au départ de la fonction */
printf ("%s \n",chaine);
while (chaine[nb_lettre]!=0) /* 0 ou '\0' */
{
nb_lettre=nb_lettre+1; /* on a une lettre en plus dans la chaine */
}
return nb_lettre; /* retour du nombre de lettre */
}
ou bibliothèque avec ma fonction
notre projet
malib.c
#include <stdio.h>
/* fonction lg_chaine */
int lg_chaine(char *chaine)
{
int nb_lettre;
nb_lettre=0; /* pas de lettre au départ de la fonction */
printf ("%s \n",chaine);
while (chaine[nb_lettre]!=0) /* 0 ou '\0' */
{
nb_lettre=nb_lettre+1; /* on a une lettre en plus dans la chaine */
}
return nb_lettre; /* retour du nombre de lettre */
}
malib.h
#ifndef __malib__
#define __malib__
/* fonction lg_chaine */
int lg_chaine(char *chaine);
#endif
cptchaine.c (main)
/********************************
* Projet : passage de chaine
* Auteur : Bogt
* Date : 28/11/2022
********************************/
#include <stdlib.h>
#include <stdio.h>
#include "malib.h"
int main (int argc, char **argv)
{
int letter_number;
letter_number=lg_chaine ("Bonjour le monde");
printf ("on a %d lettre(s) ou espace(s) dans cette chaine\n",letter_number);
return EXIT_SUCCESS;
}
gcc -c malib.c
bruno@elliott:~/Works/langage_C/cptchaine/prj$ ls -l
total 16
-rw-r--r-- 1 bruno bruno 403 29 nov. 16:41 cptchaine.c
-rw-r--r-- 1 bruno bruno 357 29 nov. 16:46 malib.c
-rw-r--r-- 1 bruno bruno 98 29 nov. 16:45 malib.h
-rw-r--r-- 1 bruno bruno 1424 29 nov. 16:46 malib.o
on obtient le fichier .o (objet) rien avoir avec la programmation objet
c'est le code machine de ma fonction (en langage machine)
on va faire les liens entre les fichiers grâce à gcc
gcc malib.o cptchaine.c -o cptchaine -Wall -pedantic -ansi -g
qui va générer l'exécutable
une autre méthode :
sans voir le .o ...
gcc malib.c cptchaine.c -o cptchaine -Wall -pedantic -ansi -g
Regardons avec gdb , step ou next...