J’ai le code que je veux avoir deux modes, debug et verbose . Je les définis dans mon fichier d’en-tête comme, #define verbose TRUE #define debug TRUE Jusqu’à présent, dans mon code, je viens d’utiliser #if(debug) //code #endif mais est-il plus approprié d’utiliser #ifdef debug // code #endif J’ai lu quelque chose sur les macros […]
Nous soaps que les macros multilignes doivent être incluses dans une boucle do while (0) pour pouvoir être incluses en toute sécurité dans le code. Par exemple, c’est 100% sûr: #define swap( a , b ) \ do \ { \ int t = a ; \ a = b ; \ b = t […]
Je ne sais plus trop quand utiliser des macros ou des énumérations. Les deux peuvent être utilisés comme constantes, mais quelle est la différence et quel est l’avantage de l’un ou de l’autre? Est-ce lié ou non au niveau du compilateur?
J’ai le code suivant: #define NUMBER_OF_ROOMS if((unsigned int)(NUMBER_OF_ROOMS – 2) > 20) { // do something here } mais j’ai un avertissement de peluches: Warning 506: Constant value Boolean , qu’est-ce que cela signifie et comment le corriger?
J’apprends c99 et après avoir lu sur les structures j’ai trouvé la macro suivante dans le code du kernel Linux : #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) Je .. quoi? Usage: #include #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) struct book { char title[100]; char author[100]; }; int main(void) { printf(“%lu\n”, FIELD_SIZEOF(struct book, title)); // prints 100 } Voici l’extension […]
Je souhaite définir une macro C en la passant comme argument, appelé à partir de la ligne de commande. Arrière-plan: je souhaite que la directive #define ENABLE_OPT 1 soit incluse dans mon code source C lorsqu’une certaine option de construction est choisie. Ainsi, je veux que cela se fasse via la ligne de commande make […]
Je veux utiliser un paramètre de macro comme ceci: #define D(cond,…) do{ \ #if cond \ #define YYY 1 \ #else \ #define YYY 0 \ } while(0) C’est possible? UPD Peut-être que lorsque les sources seront prétraitées deux fois: gcc -E source.c | gcc -xc – gcc -E source.c | gcc -xc – next […]
J’ai le code suivant: #define MY_MACRO(PARAM) int PARAM_int; double PARAM_double; [subsequent instructions] Malheureusement, cela ne fonctionne pas, ce qui signifie que PARAM n’est pas remplacé dans les noms de variables. Est-ce que ce problème est résolu?
J’aimerais écrire une macro C qui prend ceci: int foo() { MY_MACRO } et le développe à ceci: int foo() { _macro_var_foo++; } J’ai constaté que je ne pouvais pas utiliser __func__ , car la macro ne l’étend pas réellement; il est traité par le pré-processeur comme une variable. Y a-t-il un moyen de faire […]
Dupliquer possible: Une énigme (en C) J’ai quelques questions concernant l’extrait suivant: #include #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0])) int array[] = {23,34,12,17,204,99,16}; int main() { int d; for(d=-1;d <= (TOTAL_ELEMENTS-2);d++) printf("%d\n",array[d+1]); return 0; } Ici, la sortie du code n’imprime pas les éléments du tableau comme prévu. Mais quand j’ajoute un transtypage de (int) la […]