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, […]
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 […]
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 […]
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 {…} . […]
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 […]
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 […]
#define max(a,b) \ ({ typeof (a) _a = (a); \ typeof (b) _b = (b); \ _a > _b ? _a : _b; }) Pourquoi pas simplement (a>b ? a : b) ?
Quelle est la différence entre #pragma et _Pragma() en C? syntaxe: #pragma arg et _Pragma(arg) Quand devrais-je utiliser _Pragma(arg) ?
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 […]
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]) ?