Articles of macros

Est-ce que #if MACRO est équivalent à #ifdef MACRO?

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 […]

do {} while (0) – sécurité des 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 […]

Qu’est-ce qui fait une meilleure constante en C, une macro ou une enum?

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?

comment nettoyer cet avertissement de peluches en c?

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?

Explication de la macro FIELD_SIZEOF du kernel Linux

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 […]

Comment une définition de macro peut-elle être passée comme argument?

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 […]

Est-il possible de définir une macro dans une macro?

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 […]

Dans une clause #define, comment faire en sorte que le préprocesseur remplace un paramètre dans un nom de variable?

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?

Puis-je remplacer __func__ par un nom d’identifiant dans une macro C?

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 […]

Confus au sujet de l’expansion des macros C et de l’arithmétique des nombres entiers

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 […]