10.6 Changer l'appel à une fonction avec une macro

Ce que nous allons faire maintenant va éclaircir le précédent ralage du compilateur (et même ci ce n'est pas français c'est quand même ce qu'il s'est passé).

Nous allons changer le comportement de notre programme avec une macro.

Nous allons écrire un programme qui va utiliser la fonction qu'on va lui passer en paramètre.

En fait, pour faire simple, nous allons afficher un texte dans la console avec la fonction printf ou une autre fonction, qui affichera le texte en vert.

Voici le programme :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>

using namespace std;

#include <stdio.h>
#include <iostream>

//cette fonction permet de choisir une couleur pour l'affichage
void textColor(const char* param){
	printf("\033[%sm",param);
}

//cette fonction permet d'afficher un texte en couleur
void printColor(const char * str){
	printf("\033[32m%s", str);
	textColor("0");
}


int main (int argc, char** argv) {
	
#ifdef USE_FONCTION
	USE_FONCTION("Texte à écrire dans la console\n");
#else
	printf("RTT\n");
#endif
	return 0;
}

Mais je ne vois pas d'appel à la fonction printf ni à une autre fonction.

C'est la macro USE_FONCTION qui prendra pour valeur printf ou printColor.

Nous faisons toujours attention que le programme fasse quelque chose ("RTT") si on oublie de passer une macro au compilateur.

Compilons pour afficher le texte avec printf :

g++ -Wall main.cpp -DUSE_FONCTION=printf -o test

Regardons le résultat :

./test
Texte à écrire dans la console

Il ne se passe rien d'extraordinaire, mais ça à fonctionné.

Compilons pour afficher le texte avec printColor :

g++ -Wall main.cpp -DUSE_FONCTION=printColor -o test

Voilà le résultat :

./test
Texte à écrire dans la console

Et voilà un texte en couleur.

Et le plus important c'est que nous avons fait ces deux choses différentes avec le même code source mais compilé différemment.