Articles of macros

Un groupe de macros variadiques

Je voudrais avoir un groupe de nombre variable d’arguments passés dans une macro. J’ai les macros suivantes qui sont incorrectes: #define M_NARGS(…) M_NARGS_(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) #define M_NARGS_(_10, _9, _8, _7, _6, _5, _4, _3, _2, _1, N, …) N #define M_CONC(A, B) M_CONC_(A, B) #define M_CONC_(A, […]

Pourquoi ces remplacements de macros consécutifs n’entraînent-ils pas une erreur?

Ce programme donne la sortie en tant que 5. Mais après avoir remplacé toutes les macros, il en résulte –5 . Cela devrait provoquer une erreur de compilation, en essayant de décrémenter le 5 . Mais il comstack et fonctionne bien. #include #define A -B #define B -C #define C 5 int main() { printf(“The […]

Évaluation multiple involontaire du paramètre dans la macro

Pourquoi le résultat de la deuxième impression est-il: max de 50 et 67 de 62? Pourquoi ne pas max de 50 et 62 est 57? #define MAX(a,b) ((a)>(b) ? (a): (b)) int incr(){ static int i =42; i += 5; return i; } int _tmain(int argc, _TCHAR* argv[]) { int x = 50; printf(“max of […]

Conteneurs génériques de type sécurisé avec macros

J’essaie de créer une liste de liens génériques sécurisée en C en utilisant des macros. Cela devrait fonctionner de la même manière que les modèles en C ++. Par exemple, LIST(int) *list = LIST_CREATE(int); Ma première tentative a été pour #define LIST(TYPE) (la macro que j’ai utilisée ci-dessus) de définir un struct _List_##TYPE {…} . […]

Comment évaluer une macro de préprocesseur nestede

Supposons que je souhaite sélectionner le comportement d’une directive du préprocesseur donnée en évaluant, au moment de la compilation, la concaténation d’une chaîne constante et le résultat d’une autre macro. #define CASE1 text1 #define CASE2 text2 #define CASE3 text3 #define SCENARIO 3 /** the following won’t work – for examplification purposes only**/ #define FUNCTION CASE##SCENARIO […]

Pourquoi les deux sorties sont différentes?

J’ai utilisé le code C suivant et il a donné la sortie comme d’habitude: 9, 25 #include int PRODUCT(int x) { return (x*x); } void main() { int i = 3, j, k; j = PRODUCT(i++); k = PRODUCT(++i); printf(“%d, %d\n”, j,k); } Cependant, quand j’utilisais la définition de la macro au lieu de la […]

Pourquoi la macro ‘max’ définie comme ceci en C?

#define max(a,b) \ ({ typeof (a) _a = (a); \ typeof (b) _b = (b); \ _a > _b ? _a : _b; }) Pourquoi pas simplement (a>b ? a : b) ?

Différence entre #pragma et _Pragma () en C

Quelle est la différence entre #pragma et _Pragma() en C? syntaxe: #pragma arg et _Pragma(arg) Quand devrais-je utiliser _Pragma(arg) ?

Développer les macros dans la chaîne entre guillemets

Dupliquer possible: C Macros pour créer des chaînes J’ai une fonction qui accepte un argument de type char* , comme f(“ssortingng”); Si l’argument de chaîne est défini à la volée dans l’appel de la fonction, comment les macros peuvent-elles être développées dans le corps de la chaîne? Par exemple: #define COLOR #00ff00 f(“abc COLOR”); serait […]

Que signifie sizeof (int )?

Je suis nouveau dans le kernel Linux. Je lis le fichier ioctl.h , j’ai rencontré une macro _IOC_TYPECHECK(t) , qui ressemble à ceci: #define _IOC_TYPECHECK(t) \ ((sizeof(t) == sizeof(t[1]) && \ sizeof(t) < (1 << _IOC_SIZEBITS)) ? \ sizeof(t) : __invalid_size_argument_for_IOC) Pouvez-vous m’expliquer ce code? Dans ce code, que signifie sizeof(t[1]) ?