FONCTIONS

Salut ce forum apprends les bases du c++

Moderator: Rick

Post Reply
Hydraxx
Site Admin
Posts: 114
Joined: Mon Jan 12, 2026 4:04 pm
Location: France
Contact:

FONCTIONS

Post by Hydraxx »

FONCTIONS

À QUOI ÇA SERT ?

Une fonction permet d’encapsuler une opération réutilisable.

Au lieu d’écrire dix fois le même code :

Code: Select all

result = a + b;
tu peux créer :

Code: Select all

int add(int a, int b)
{
    return a + b;
}
Puis :

Code: Select all

int x = add(10, 20);

1. DÉCLARATION

Code: Select all

int add(int a, int b);
Elle indique au compilateur la signature.


2. DÉFINITION

Code: Select all

int add(int a, int b)
{
    return a + b;
}

3. PARAMÈTRES PAR VALEUR

Code: Select all

void increment(int value)
{
    ++value;
}
Appel :

Code: Select all

int x{10};
increment(x);
x vaut toujours 10.

Pourquoi ?

value est une copie locale.


4. RETOUR

Code: Select all

int doubleValue(int x)
{
    return x * 2;
}
Le résultat est renvoyé à l’appelant.


5. SURCHARGE

Code: Select all

int add(int a, int b);
double add(double a, double b);
Le compilateur choisit selon les arguments.

La surcharge est utile pour fournir la même opération logique à plusieurs types.


6. LE TYPE DE RETOUR NE SUFFIT PAS


Ceci n’est pas valide :

Code: Select all

int f();
double f();
Pourquoi ?

Quand tu écris :

Code: Select all

f();
le compilateur ne peut pas savoir quelle fonction choisir uniquement grâce au type de retour.


7. auto COMME TYPE DE RETOUR

Code: Select all

auto add(int a, int b)
{
    return a + b;
}
Le compilateur déduit int.


8. __func__

Code: Select all

void test()
{
    std::cout << __func__;
}
Affiche le nom de la fonction courante.

Utile pour les logs.


9. CE QUI SE PASSE AU NIVEAU MACHINE


Une fonction C++ finit par devenir des instructions machine.

Lors d’un appel, les paramètres sont transmis selon une convention d’appel / ABI.

Sous Windows x64, pour les appels natifs classiques, les quatre premiers paramètres entiers/pointeurs sont généralement transmis dans :

Code: Select all

RCX
RDX
R8
R9
Le reste peut passer par la pile.

Le retour entier/pointeur est souvent dans RAX.

Exemple conceptuel :

Code: Select all

add(1, 2)
peut devenir quelque chose proche de :

Code: Select all

mov ecx, 1
mov edx, 2
call add
Puis résultat dans EAX/RAX.

C’est pourquoi comprendre les fonctions est essentiel en reverse engineering.


À RETENIR


Au niveau C++, une fonction est une abstraction.

Au niveau CPU, elle devient :
  • préparation des arguments ;
  • call ;
  • changement du flot d’exécution ;
  • exécution ;
  • ret ;
  • récupération du résultat.

Return to “Bases du C++”

Who is online

Users browsing this forum: No registered users and 0 guests