Vous n'êtes pas identifié(e).
Pages : 1
Désactiver des bouts de code
[== C++ ==]
#if 0
....
#endif
Le code entre #if 0 et #endif sera ignoré.
Utiliser des macros
* Utiliser les macro en multifichier pour éviter de redéclarer plusieurs fois les même types, variables et fonctions.
[== C++ ==]
/* fichier1.c */
#include <stdio.h>
#include "fichier2.c"
#if not defined __FICHIER1__
#define __FICHIER1__
int a; // deja declaré dans fichier2.c -> source de conflit
char* b; // deja declaré dans fichier2.c -> source de conflit
float c; // deja declaré dans fichier2.c -> source de conflit
...
int main(){
...
return 0;
}
#endif
/* fichier2.c */
#include <stdio.h>
#if not defined __FICHIER2__
#define __FICHIER2__
int a; /* defini globalement ici et inclus dans fichier1.c via #include */
char* b; /* defini globalement ici et inclus dans fichier1.c via #include */
float c; /* defini globalement ici et inclus dans fichier1.c via #include */
...
void uneProcedure(){};
int uneFonction(){return a;};
#endif
dans la meme mesure en multifchier, si on est sur et certain que un type, une variable ou une fonction dois etre uilisé et qu'elle existera dans une des bibliothèques utilisées, on peut précéder un type ou une fonction par extern, cela indique qu'ils sont déja déclarés ailleurs dans le projet.
[== C++ ==]
...
extern int x,y;
...
extern void fabriquerMenu(int x, int y);
...
* Créer des macros pour se faciliter la vie avec les messages d'erreurs répétés.
[== C++ ==]
...
#define ERROR_IO_CANNOTREADFILE "Le fichier n'exite pas ou ne peut être lu."
...
fprintf(stderr,"%s",ERROR_IO_CANNOTREADFILE);
exit(-1);
...
* Macro de test booléenne (format chaîne de caractère personnalisable)
[== C++ ==]
#define TEST(a) (a)?"vrai":"faux"
...
printf("Est-ce que a == b ? %s",TEST(a==b));
...
On peut aussi faire ceci, au format numérique
[== C++ ==]
#define FALSE 0
#define TRUE 1
#define TEST(a) (a)?TRUE:FALSE
Utilisation de macros spéciales
Détecter le système d'exploitation:
* Windows
[== C++ ==]
#if defined (_WIN32) || defined (__WIN32__)
...
#endif
* GNU/Linux
[== C++ ==]
#if defined (__linux__) || defined (linux)
...
#endif
Date et heure
[== C++ ==]
printf("on est en %s et il est %s", __DATE__,__TIME__); /* affichera: on est en Dec 26 2013 et il est 19:03:47 (avec date et heure locale évidemment) */
Ceci ne montre que quelques exemples les plus utiles, pour une liste plus exhaustive, c'est par ici:
En rapport avec le système d'exploitation => http://homepage.ntlworld.com/jonathan.d … tform.html
En rapport avec les compilateurs => http://homepage.ntlworld.com/jonathan.d … piler.html
En rapport avec l'architecture processeur => http://homepage.ntlworld.com/jonathan.d … essor.html
Et ici également => http://homepage.ntlworld.com/jonathan.d … guage.html
Beaucoup plus complet ici => http://sourceforge.net/p/predef/wiki/Home/
Les standards (__TIME__, __FILE__, __STDC__, ... etc) => http://gcc.gnu.org/onlinedocs/cpp/Stand … acros.html
---
Ce sujet n'est pas exhaustif et peut être modifié à tout moment.
Hors ligne
Pages : 1