{"id":3604,"date":"2025-08-06T15:19:32","date_gmt":"2025-08-06T14:19:32","guid":{"rendered":"https:\/\/workboot.fr\/ciela\/?page_id=3604"},"modified":"2025-08-07T10:39:31","modified_gmt":"2025-08-07T09:39:31","slug":"lib-de-fonctions","status":"publish","type":"page","link":"https:\/\/workboot.fr\/ciela\/lib-de-fonctions\/","title":{"rendered":"Librairie de fonctions"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\" id=\"h.ud00ga5g818v_l\">Pr\u00e9sentation:<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">la fonction en math\u00e9matique la plus connue est y = f (x)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">f \u00e9tant ici la fonction.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">en C le principe est le m\u00eame.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On rappel que la fonction principale (qui permet de d\u00e9marrer le programme) est:&nbsp;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">int main (int argc, char **argv)\n{\nreturn EXIT_SUCCESS;  \/* retour de la fonction *\/\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">c&rsquo;est la fonction minimale pour faire un code C<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;id\u00e9e de d\u00e9couper en fonction est de d\u00e9couper les taches en sous tache..Et de pouvoir constituer des librairies.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ecrire une fonction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">on va pour s&rsquo;exercer r\u00e9aliser une fonction lg_chaine()  qui va nous renvoyer le nombre de caract\u00e8re d&rsquo;une cha\u00eene  (string), il faut se rappeler ici qu&rsquo;une cha\u00eene de  caract\u00e8re se termine toujours par le code NUL ou \\0 ou 0.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h.jk37xp9tdh9y_l\">prototype<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le prototype de la fonction lg_chaine est :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">int lg_chaine(char *chaine);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">qui va utiliser une boucle de comptage&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ici la fonction est vu par gcc avant de voir le main ! donc pas besoin de pr\u00e9senter son prototype.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/********************************\n * Projet : comptage de caract\u00e8re\n * Auteur : Bogt\n * Date   : 28\/11\/2022\n ********************************\n#include &lt;stdlib.h>\n#include &lt;stdio.h>\n\n\/* fonction lg_chaine *\/\nint lg_chaine(char *chaine)\n{\n\tint nb_lettre;\n\tnb_lettre=0;   \/* pas de lettre au d\u00e9part de la fonction *\/\n\tprintf (\"%s \\n\",chaine);\n\twhile (chaine[nb_lettre]!=0)  \/* 0 ou '\\0' *\/\n \t{\n\t\tnb_lettre=nb_lettre+1; \t\/* on a une lettre en plus dans la chaine *\/\n\t}\n\treturn nb_lettre; \/* retour du nombre de lettre *\/\n}\n\nint main (int argc, char **argv)\n{\t\n\tint letter_number;\n\tletter_number=lg_chaine (\"Bonjour le monde\");\n\tprintf (\"on a %d lettre(s) ou espace(s) dans cette chaine\\n\",letter_number);\n\treturn EXIT_SUCCESS;\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Avec Monia<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">le programme main (principal)<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/08\/cptchaine1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"444\" src=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/08\/cptchaine1-1024x444.png\" alt=\"\" class=\"wp-image-3610\" srcset=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/08\/cptchaine1-1024x444.png 1024w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/08\/cptchaine1-300x130.png 300w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/08\/cptchaine1-768x333.png 768w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/08\/cptchaine1.png 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Programme principal<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/08\/cptchaine2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"539\" src=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/08\/cptchaine2-1024x539.png\" alt=\"\" class=\"wp-image-3611\" srcset=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/08\/cptchaine2-1024x539.png 1024w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/08\/cptchaine2-300x158.png 300w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/08\/cptchaine2-768x404.png 768w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/08\/cptchaine2.png 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">fonction lg_chaine()<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Le prototype de lg_chaine pour annoncer la couleur \u00e0 gcc<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/********************************\n * Projet : passage de chaine proto\n * Auteur : Bogt\n * Date   : 28\/11\/2022\n ********************************\/\n#include &lt;stdlib.h>\n#include &lt;stdio.h>\n\n\/* prototype de  lg_chaine *\/\nint lg_chaine(char *chaine);\n\n\/************* MAIN *****************************\/\nint main (int argc, char **argv)\n{\t\n\tint letter_number;\n\tletter_number=lg_chaine (\"Bonjour le monde\");\n\tprintf (\"on a %d lettre(s) ou espace(s) dans cette chaine\\n\",letter_number);\n\treturn EXIT_SUCCESS;\n}\n\/************ Ma ou Mes fonction(s) *************\/\n\/* fonction lg_chaine *\/\nint lg_chaine(char *chaine)\n{\n\tint nb_lettre;\n\tnb_lettre=0;   \/* pas de lettre au d\u00e9part de la fonction *\/\n\tprintf (\"%s \\n\",chaine);\n\twhile (chaine[nb_lettre]!=0)  \/* 0 ou '\\0' *\/\n \t{\n\t\tnb_lettre=nb_lettre+1; \t\/* on a une lettre en plus dans la chaine *\/\n\t}\n\treturn nb_lettre; \/* retour du nombre de lettre *\/\n}<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"h.pibkc6teqisc_l\">Ma premi\u00e8re libraire&nbsp;<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;ou biblioth\u00e8que avec ma fonction<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Notre projet sera dans un r\u00e9pertoire : monprojet<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">on y trouvera les fichiers suivants :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;stdio.h>\n\n\/* fonction lg_chaine *\/\nint lg_chaine(char *chaine)\n{\n\tint nb_lettre;\n\tnb_lettre=0;   \/* pas de lettre au d\u00e9part de la fonction *\/\n\tprintf (\"%s \\n\",chaine);\n\twhile (chaine[nb_lettre]!=0)  \/* 0 ou '\\0' *\/\n \t{\n\t\tnb_lettre=nb_lettre+1; \t\/* on a une lettre en plus dans la chaine *\/\n\t}\n\treturn nb_lettre; \/* retour du nombre de lettre *\/\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">malib.c  (code c de la fonction)<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#ifndef __malib__\n#define __malib__\n\/* fonction lg_chaine *\/\nint lg_chaine(char *chaine);\n#endif<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">malib.h (header de fichier)<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/********************************\n * Projet : passage de chaine\n * Auteur : Bogt\n * Date   : 28\/11\/2022\n ********************************\/\n\n#include &lt;stdlib.h>\n#include &lt;stdio.h>\n#include \"malib.h\"\n\nint main (int argc, char **argv)\n{\t\n\tint letter_number;\n\tletter_number=lg_chaine (\"Bonjour le monde\");\n\tprintf (\"on a %d lettre(s) ou espace(s) dans cette chaine\\n\",letter_number);\n\treturn EXIT_SUCCESS;\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">cptchaine.c  (main)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Compilation du projet:<br><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">le fichier objet<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gcc -c  malib.c\nbruno@elliott:~\/Works\/langage_C\/cptchaine\/prj$ ls -l\ntotal 16\n-rw-r--r-- 1 bruno bruno  403 29 nov.  16:41 cptchaine.c\n-rw-r--r-- 1 bruno bruno  357 29 nov.  16:46 malib.c\n-rw-r--r-- 1 bruno bruno   98 29 nov.  16:45 malib.h\n-rw-r--r-- 1 bruno bruno 1424 29 nov.  16:46 <mark style=\"background-color:rgba(0, 0, 0, 0);color:#cf2e2e\" class=\"has-inline-color\">malib.o<\/mark><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">on obtient le fichier .o (objet) rien avoir avec la programmation objet&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">c&rsquo;est le code machine de ma fonction (en langage machine)<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"asm\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">bruno@debian:~\/Works\/langageC\/malib$ objdump -d -C malib.o\n\nmalib.o:     format de fichier elf64-x86-64\n\n\nD\u00e9assemblage de la section .text\u00a0:\n\n0000000000000000 &lt;lg_chaine>:\n   0:\t55                   \tpush   %rbp\n   1:\t48 89 e5             \tmov    %rsp,%rbp\n   4:\t48 83 ec 20          \tsub    $0x20,%rsp\n   8:\t48 89 7d e8          \tmov    %rdi,-0x18(%rbp)\n   c:\tc7 45 fc 00 00 00 00 \tmovl   $0x0,-0x4(%rbp)\n  13:\t48 8b 45 e8          \tmov    -0x18(%rbp),%rax\n  17:\t48 89 c6             \tmov    %rax,%rsi\n  1a:\t48 8d 05 00 00 00 00 \tlea    0x0(%rip),%rax        # 21 &lt;lg_chaine+0x21>\n  21:\t48 89 c7             \tmov    %rax,%rdi\n  24:\tb8 00 00 00 00       \tmov    $0x0,%eax\n  29:\te8 00 00 00 00       \tcall   2e &lt;lg_chaine+0x2e>\n  2e:\teb 04                \tjmp    34 &lt;lg_chaine+0x34>\n  30:\t83 45 fc 01          \taddl   $0x1,-0x4(%rbp)\n  34:\t8b 45 fc             \tmov    -0x4(%rbp),%eax\n  37:\t48 63 d0             \tmovslq %eax,%rdx\n  3a:\t48 8b 45 e8          \tmov    -0x18(%rbp),%rax\n  3e:\t48 01 d0             \tadd    %rdx,%rax\n  41:\t0f b6 00             \tmovzbl (%rax),%eax\n  44:\t84 c0                \ttest   %al,%al\n  46:\t75 e8                \tjne    30 &lt;lg_chaine+0x30>\n  48:\t8b 45 fc             \tmov    -0x4(%rbp),%eax\n  4b:\tc9                   \tleave\n  4c:\tc3                   \tret\nbruno@debian:~\/Works\/langageC\/malib$ \n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">on va faire les liens entre les fichiers gr\u00e2ce \u00e0 gcc\u00a0<br><br><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gcc malib.o cptchaine.c -o cptchaine -Wall -pedantic -ansi -g<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">qui va g\u00e9n\u00e9rer l&rsquo;ex\u00e9cutable<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On est pas oblig\u00e9 de fabriquer les fichiers objets \u00e0 chaque fois ! on peut obtenir l&rsquo;ex\u00e9cutable directement. (mais les objets existeront  mais pendant la phase de compilation)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gcc malib.c cptchaine.c -o cptchaine -Wall -pedantic -ansi -g<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Regardons avec gdb , step ou next&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pr\u00e9sentation: la fonction en math\u00e9matique la plus connue est y = f (x) f \u00e9tant ici la fonction. en C le principe est le m\u00eame. On rappel que la fonction principale (qui permet de d\u00e9marrer le programme) est:&nbsp; c&rsquo;est la fonction minimale pour faire un code C L&rsquo;id\u00e9e de d\u00e9couper en fonction est de d\u00e9couper [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-3604","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"admin","author_link":"https:\/\/workboot.fr\/ciela\/author\/admin\/"},"uagb_comment_info":0,"uagb_excerpt":"Pr\u00e9sentation: la fonction en math\u00e9matique la plus connue est y = f (x) f \u00e9tant ici la fonction. en C le principe est le m\u00eame. On rappel que la fonction principale (qui permet de d\u00e9marrer le programme) est:&nbsp; c&rsquo;est la fonction minimale pour faire un code C L&rsquo;id\u00e9e de d\u00e9couper en fonction est de d\u00e9couper\u2026","_links":{"self":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/3604","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/comments?post=3604"}],"version-history":[{"count":17,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/3604\/revisions"}],"predecessor-version":[{"id":3638,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/3604\/revisions\/3638"}],"wp:attachment":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/media?parent=3604"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}