-
Types de Base
Type Taille (en octets) Description char1 Caractère (valeur ASCII), ou petit entier (-128 à 127 ou 0 à 255). bool1 Type booléen ( trueoufalse), défini dans<stdbool.h>.int4 Entier standard signé (-2³¹ à 2³¹−1 sur 32 bits). float4 Nombre réel en précision simple (≈ 7 chiffres significatifs). double8 Nombre réel en double précision (≈ 15 chiffres significatifs). long double8, 10 ou 16 Nombre réel en précision étendue (dépend de l’implémentation). void— Indique l’absence de type ou de valeur (utilisé pour les fonctions sans retour). -
Modificateurs de Type
Les modificateurs changent la taille ou le signe des types entiers et réels.
Combinaison possible Taille (octets) Description short int/short2 Entier court (–32 768 à 32 767). unsigned short int2 Entier court non signé (0 à 65 535). unsigned int4 Entier non signé (0 à 4 294 967 295). long int/long4 ou 8 Entier long (dépend de l’architecture). unsigned long int4 ou 8 Entier long non signé. long long int8 Entier très long (au moins ±9×10¹⁸). unsigned long long int8 Entier très long non signé. signed char1 Caractère signé (–128 à 127). unsigned char1 Caractère non signé (0 à 255). 💡 Remarque Les tailles peuvent varier selon la machine et le compilateur (utiliser
sizeof(type)pour vérifier). -
Classes de Stockage
Les classes de stockage définissent la durée de vie et la portée (visibilité) des variables.
Spécificateur Description autoValeur automatique (par défaut pour les variables locales). staticConserve la valeur de la variable entre plusieurs appels de fonction. externIndique que la variable est définie dans un autre fichier. registerSuggestion pour stocker la variable dans un registre (accès rapide, mais non garanti). -
Qualificateurs
Les qualificateurs modifient le comportement du compilateur vis-à-vis de la variable.
Qualificateur Description constVariable non modifiable (lecture seule). volatileEmpêche les optimisations sur la variable (utile pour registres matériels ou interruptions). restrict(C99) Indique que le pointeur est la seule référence à la donnée qu’il pointe. -
Déterminer l'Intervalle des Types de Données
-
Pour les types signés
- L'intervalle est de
$-2^{n-1}$ à$2^{n-1} - 1$ , où$n$ est le nombre de bits utilisés pour le type.
- L'intervalle est de
-
Pour les types non signés
- L'intervalle est de
$0$ à$2^n - 1$ , où$n$ est le nombre de bits utilisés pour le type.
- L'intervalle est de
-
Type Nom_var = valeur;
const Type Nom_const = valeur;-
%[flags][largeur][.précision][modificateur]spécificateur
-
flags(optionnel) Contrôle l'alignement, le remplissage, etc.-Alignement à gauche.0Remplissage avec des zéros.+Affiche le signe (+ ou -) pour les nombres.(espace) Ajoute un espace pour les nombres positifs.#Format alternatif (ex:0xpour les hexadécimaux).
-
largeur(optionnel) Nombre minimal de caractères à afficher.- Exemple
%5d→ Affiche un entier avec une largeur minimale de 5.
- Exemple
-
.précision(optionnel) Nombre de chiffres après la virgule pour les flottants, ou nombre maximal de caractères pour les chaînes.- Exemple
%.2f→ Affiche un flottant avec 2 chiffres après la virgule. - Exemple
%.5s→ Affiche uniquement les 5 premiers caractères d'une chaîne.
- Exemple
-
modificateur(optionnel) Modifie la taille du type de donnée.hshort(ex:%hdpour unshort int).llong(ex:%ldpour unlong int).lllong long(ex:%lldpour unlong long int).Llong double(ex:%Lfpour unlong double).
-
spécificateurDétermine le type de donnée.-
douiEntier signé. -
uEntier non signé. -
fFlottant. -
cCaractère. -
sChaîne de caractères. -
pPointeur. -
%Affiche le caractère%.Caractère Type de donnée Exemple %d Entier signé (int) printf("%d", 42);→42%f Nombre à virgule flottante printf("%.2f", 3.14);→3.14%c Caractère (char) printf("%c", 'A');→A%s Chaîne de caractères (char *) printf("%s", "Hello");→Hello%p Adresse mémoire (pointeur) printf("%p", &x);→0x7ffdfb2c%% Affiche le caractère %printf("%%");→%
-
-
-
%[*][largeur][modificateur]spécificateur
-
*(optionnel) Ignore la donnée lue (ne la stocke pas). -
largeur(optionnel) Nombre maximal de caractères à lire. -
modificateur(optionnel) Modifie la taille du type de donnée (comme pourprintf). -
spécificateurDétermine le type de donnée (comme pourprintf).Caractère Type de donnée Exemple %d Entier signé (int) scanf("%d", &x);(lit un entier)%f Nombre à virgule flottante scanf("%f", &y);(lit un float)%c Caractère (char) scanf("%c", &c);(lit un caractère)%s Chaîne de caractères (char *) scanf("%s", str);(lit une chaîne)%p Adresse mémoire (pointeur) scanf("%p", &ptr);(lit un pointeur)
-
| Séquence | Description | Valeur ASCII |
|---|---|---|
\0 |
Caractère nul (fin de chaîne) | 0 |
\a |
Alarme (bip sonore) | 7 |
\b |
Backspace (retour arrière) | 8 |
\t |
Tabulation horizontale | 9 |
\n |
Nouvelle ligne (line feed) | 10 |
\v |
Tabulation verticale | 11 |
\f |
Saut de page (form feed) | 12 |
\r |
Retour chariot (carriage return) | 13 |
\" |
Guillemet double | 34 |
\' |
Apostrophe | 39 |
\\ |
Barre oblique inversée | 92 |
\? |
Point d'interrogation (utilisé dans les trigraphes) | 63 |
\xhh |
Caractère représenté par sa valeur hexadécimale | Dépend de hh |
\ooo |
Caractère représenté par sa valeur octale | Dépend de ooo |
-
Opérateur Description Exemple +Addition a + b-Soustraction a - b*Multiplication a * b/Division a / b%Modulo (reste de la division) a % b++Incrémentation (ajoute 1) a++ou++a--Décrémentation (soustrait 1) a--ou--a -
Opérateur Description Exemple ==Égal à a == b!=Différent de a != b>Supérieur à a > b<Inférieur à a < b>=Supérieur ou égal à a >= b<=Inférieur ou égal à a <= b -
Opérateur Description Exemple &&ET logique a && b||OU logique a || b!NON logique (inverse) !a -
Opérateur Description Exemple =Affectation simple a = b+=Ajoute et affecte a += b(équivaut àa = a + b)-=Soustrait et affecte a -= b(équivaut àa = a - b)*=Multiplie et affecte a *= b(équivaut àa = a * b)/=Divise et affecte a /= b(équivaut àa = a / b)%=Modulo et affecte a %= b(équivaut àa = a % b)&=ET binaire et affecte a &= b(équivaut àa = a & b)^=OU exclusif binaire et affecte a ^= b(équivaut àa = a ^ b)>>=Décalage à droite et affecte a >>= b(équivaut àa = a >> b)<<=Décalage à gauche et affecte a <<= b(équivaut àa = a << b) -
Opérateur Description Exemple &ET binaire a & b^OU exclusif (XOR) binaire a ^ b~NON binaire (inversion de tous les bits) ~a<<Décalage des bits à gauche a << 2>>Décalage des bits à droite a >> 2
-
if (condition) { instructions; }
-
if (condition) { instructions; } else { instructions; }
-
if (condition1) { instructions; } else if (condition2) { instructions; } else { instructions; }
-
switch(expression) { case valeur1: instructions; break; case valeur2: instructions; break; default: instructions; break; }
-
for (initialisation; condition; incrément) { instructions; }
-
while (condition) { instructions; }
-
do { instructions; } while (condition);
// break interrompt immédiatement la boucle
break;
// continue passe à l'itération suivante
continue;
// goto transfère l'exécution vers une étiquette définie dans le programme
goto;-
// Tableau à une dimension Type Nom_Tab[taille]; // Tableau à deux dimensions Type Nom_Tab[nbr_lignes][nbr_colonnes];
-
// Tableau à une dimension int taille = sizeof(Nom_Tab) / sizeof(Nom_Tab[0]); // Tableau à deux dimensions int nbr_lignes = sizeof(Nom_Tab) / sizeof(Nom_Tab[0]); int nbr_colonnes = sizeof(Nom_Tab[0]) / sizeof(Nom_Tab[0][0]);
-
Fonction Syntaxe Description strlenstrlen(str);Longueur de str(sans\0).strcpystrcpy(dest, src);Copie srcdansdest.strncpystrncpy(dest, src, n);Copie ncaractères desrcdansdest.strcatstrcat(dest, src);Ajoute srcà la fin dedest.strncatstrncat(dest, src, n);Ajoute ncaractères desrcàdest.strcmpstrcmp(str1, str2);Compare str1etstr2(0 si égales).strncmpstrncmp(str1, str2, n);Compare ncaractères destr1etstr2. -
Fonction Syntaxe Description atoiatoi(str);Convertit stren entier (int).atolatol(str);Convertit stren entier long (long).atofatof(str);Convertit stren flottant (double). -
Fonction Syntaxe Description isalphaisalpha(c);Vérifie si cest une lettre (A-Z, a-z).isdigitisdigit(c);Vérifie si cest un chiffre (0-9).isalnumisalnum(c);Vérifie si cest une lettre ou un chiffre.islowerislower(c);Vérifie si cest une minuscule.isupperisupper(c);Vérifie si cest une majuscule.tolowertolower(c);Convertit cen minuscule.touppertoupper(c);Convertit cen majuscule. -
Fonction Syntaxe Description fgetsfgets(str, n, stream);Lit une ligne de streamdansstr(maxncaractères).fputsfputs(str, stream);Écrit strdansstream.
Type_retour nom_fonction(Type param1, Type param2) {
// Code
return valeur;
}-
type *ptr;
-
ptr = &variable;
-
*ptr;
-
ptr = tableau; ptr[i]; // ou *(ptr + i)
-
type **ptr;
-
void fonction(type *parametre) { // modification via *parametre } // Appel fonction(&variable);
-
-
const type *ptr- Valeur pointée constante (lecture seule)
- L’adresse peut changer
-
*ptr = val; // ❌ interdit ptr = autre; // ✅ autorisé
-
type *const ptr- Adresse constante
- La valeur pointée est modifiable
-
*ptr = val; // ✅ autorisé ptr = autre; // ❌ interdit
-
const type *const ptr- Adresse et valeur pointée constantes
-
*ptr = val; // ❌ interdit ptr = autre; // ❌ interdit
Astuce lire de droite à gauche pour savoir ce qui est constant.
-
-
// Alloue de la mémoire non initialisée Type *pointeur = malloc(taille * sizeof(Type));
-
// Alloue et initialise la mémoire à 0 Type *pointeur = calloc(nbr_elements, sizeof(Type));
-
// Redimensionne une zone mémoire allouée pointeur = realloc(pointeur, nouvelle_taille * sizeof(Type));
-
// Libère la mémoire allouée free(pointeur);
-
struct nom_structure { type1 champ1; type2 champ2; } variables;
-
variable.champ; // Accès direct pointeur->champ; // Accès via pointeur
-
union nom_union { type1 champ1; type2 champ2; } variables;
-
Caractéristique Structure ( struct)Union ( union)Déclaration struct nom { type1 champ1; type2 champ2; ... };union nom { type1 champ1; type2 champ2; ... };Taille en mémoire Somme des tailles de tous les champs. Taille du plus grand champ. Utilisation de la mémoire Chaque champ a son propre espace mémoire. Tous les champs partagent le même espace mémoire. Accès aux champs Tous les champs sont accessibles simultanément. Un seul champ peut être utilisé à la fois. Initialisation Tous les champs peuvent être initialisés. Seul le premier champ peut être initialisé. Utilisation typique Représenter un objet avec plusieurs attributs. Représenter un type pouvant stocker un seul type de données à la fois.
-
enum nom_enum { CONST1, CONST2, ... } variables;
-
enum nom_enum { CONST1 = valeur1, CONST2 = valeur2, ... } variables;
typedef type_existant nouveau_nom;- Exemples
typedef int Entier; // Entier est un synonyme de int typedef float Reel; // Reel est un synonyme de float typedef char Caractere; // Caractere est un synonyme de char
struct {
unsigned int champ1 nombre_de_bits;
unsigned int champ2 nombre_de_bits;
} variables;struct nom_structure {
type1 champ1;
type2 champ2;
} variables;
printf("Taille de la structure %zu octets\n", sizeof(variable));La gestion des fichiers permet de lire, écrire, créer ou modifier des fichiers sur le disque en utilisant les fonctions de la bibliothèque standard <stdio.h>.
-
FILE* fichier = fopen("nom_fichier.txt", "mode");
-
Mode Description "r"Lecture (fichier existant) "w"Écriture (crée ou écrase) "a"Ajout (écriture en fin de fichier) "r+"Lecture + écriture "w+"Lecture + écriture (efface) "a+"Lecture + ajout -
if (fichier == NULL) { printf("Erreur lors de l’ouverture du fichier.\n"); }
Toujours vérifier si le fichier a été ouvert correctement
-
fclose(fichier);
-
fprintf(fichier, "Texte %d\n", valeur); fputc('A', fichier); fputs("Chaîne", fichier);
-
fscanf(fichier, "%d", &valeur); fgetc(fichier); fgets(chaine, taille, fichier);
-
Fonction Utilité feof(f)Teste la fin de fichier ferror(f)Vérifie les erreurs rewind(f)Remet le curseur au début fflush(f)Vide le tampon du fichier remove("nom")Supprime un fichier rename(old,new)Renomme un fichier
-
#ifndef MODULE1_H // Garde contre les inclusions multiples #define MODULE1_H // Déclarations (fonctions, constantes, types) pour module1 #endif
#ifndef MODULE2_H #define MODULE2_H // Déclarations (fonctions, constantes, types) pour module2 #endif
- Un fichier
.hpar modulemodule1.h,module2.h - Chaque fichier utilise ses propres gardes (
#ifndef MODULE1_H, etc.)
- Un fichier
-
#include "module1.h" // Inclusion du fichier d'en-tête correspondant // Implémentations des fonctions du module1
#include "module2.h" // Inclusion du fichier d'en-tête correspondant // Implémentations des fonctions du module2
- Un fichier
.cpour chaque modulemodule1.c,module2.c - Ne jamais inclure un fichier
.cdans un autre fichier.c
- Un fichier
-
#include "module1.h" #include "module2.h" int main() { // Appels aux fonctions de module1 et module2 }
-
gcc -c module1.c -o module1.o gcc -c module2.c -o module2.o gcc -c main.c -o main.o gcc main.o module1.o module2.o -o programme
- Compilation séparée des modules (
.c → .o) - Édition de lien finale avec tous les objets (
.o)
- Compilation séparée des modules (
-
gcc main.c module1.c module2.c -o programme
- Compile les trois fichiers
.cdirectement sans générer de.ointermédiaires,
- Compile les trois fichiers
-
#include "fichier.h"Inclusion locale (dans le projet)#include <fichier.h>Inclusion système (ex.<stdio.h>)#ifndef/#define/#endifProtection contre les inclusions multiples
Les bibliothèques standard du C fournissent des fonctions pour de nombreuses tâches courantes.
-
<stdio.h>Entrée/sortie standard.- Fonctions
printf,scanf,fopen,fclose, etc.
- Fonctions
-
<stdlib.h>Gestion de la mémoire, nombres aléatoires et conversions.- Fonctions
malloc,free,rand,exit, etc.
- Fonctions
-
<string.h>Manipulation des chaînes de caractères.- Fonctions
strlen,strcpy,strcat,strcmp, etc.
- Fonctions
-
<math.h>Opérations mathématiques avancées.- Fonctions
pow,sqrt,sin,cos,log, etc.
- Fonctions
-
<ctype.h>Classification et manipulation des caractères.- Fonctions
isalpha,isdigit,toupper,tolower, etc.
- Fonctions
-
<time.h>Gestion du temps et des dates.- Fonctions
time,clock,difftime,strftime, etc.
- Fonctions
-
<stdbool.h>Type booléen (true,false). -
<limits.h>et<float.h>Définit les limites des types numériques.