Articles of préprocesseur

Comment vérifier si un paramètre est une expression constante intégrale dans une macro de préprocesseur C?

Je nettoie actuellement une bibliothèque C existante pour la publier sans vergogne. Une macro de préprocesseur, NPOT est utilisée pour calculer la puissance NPOT supérieure de deux pour une expression constante intégrale donnée au moment de la compilation . La macro est normalement utilisée dans les initialisations directes. Pour tous les autres cas (par exemple, […]

Que signifie ## pour le préprocesseur C (C ++)?

J’ai un programme C ci-dessous: #define f(g,g2) g##g2 main() { int var12=100; printf(“%d”,f(var,12)); } quand je lance juste le préprocesseur, il étend cela comme { int var12=100; printf(“%d”,var12); } c’est la raison pour laquelle la sortie est 100. Quelqu’un peut-il me dire comment / pourquoi le préprocesseur étend var##12 to var12 ?

Collage de jetons en C

Après avoir lu à propos de VA_NARG J’ai essayé d’implémenter la surcharge de fonctions en fonction du nombre d’arguments en C à l’ aide de macros. Maintenant le problème est: void hello1(char *s) { … } void hello2(char *s, char *t) { … } // PP_NARG(…) macro returns number of arguments :ref to link above […]

Le préprocesseur conditionnel CMake définit le code

Je migre un projet de makefile vers CMake. La personne qui a écrit le fichier Make pour la première fois avait créé un module pour écrire certaines valeurs dans un fichier include. Il y a un fichier principal config.h qui inclut un config_in.h. Le fichier config.h contient quelque chose comme ceci: #ifndef USE_FEATURE_A #define USE_FEATURE_A […]

Faire quelque chose à la fois d’un identifiant C et d’une chaîne?

Supposons que vous souhaitiez générer une liste correspondante d’identifiants et de chaînes enum { NAME_ONE, NAME_TWO, NAME_THREE }; myFunction(NAME_ONE, “NAME_ONE”); myFunction(NAME_TWO, “NAME_TWO”); myFunction(NAME_THREE, “NAME_THREE”); ..sans répéter, et sans générer automatiquement le code, en utilisant des macros C / C ++ Estimation initiale: Vous pouvez append un fichier #include contenant myDefine(NAME_ONE) myDefine(NAME_TWO) myDefine(NAME_THREE) Puis utilisez-le deux […]

#Ifdef (ou d’autres directives du préprocesseur) fonctionne-t-il avec les déclarations de fonctions (pour tester l’existence de fonctions)?

Pourquoi le code suivant ne fonctionne-t-il pas comme prévu? void foobar(int); #ifndef foobar printf(“foobar exists”); #endif Il imprime toujours le message. il est évidemment impossible de détecter l’existence d’une fonction en tant qu’entité. (Est-ce un problème de surcharge?) Pourquoi #ifdef (ou ses variantes) ne détecte-t-il pas les déclarations de fonction? Les déclarations doivent être disponibles […]

Opposite de la «ssortingngification» du préprocesseur C

Lorsque vous utilisez le préprocesseur, vous pouvez définir l’argument de macro comme suit: #define TO_STRING(x) “a ssortingng with ” #x et donc lorsqu’il est utilisé, le résultat est le suivant: TO_STRING(test) sera développé comme TO_STRING(test) : “a ssortingng with test” Y a-t-il un moyen de faire le contraire? Obtenir un littéral de chaîne comme argument […]

Définition de variable dans les fichiers d’en-tête

Ma connaissance très élémentaire du processus de compilation et de C s’est rouillée récemment. J’essayais de comprendre la réponse à la question suivante mais je ne pouvais pas associer les bases de la compilation, du lien et de la phase de pré-traitement. Une recherche rapide sur Google n’a pas beaucoup aidé non plus. J’ai donc […]

Détecter l’endianité

J’essaie actuellement de créer un code source C qui gère correctement les E / S, quelle que soit la finalité du système cible. J’ai choisi “little endian” comme convention d’E / S, ce qui signifie que, pour le processeur big endian, je dois convertir les données en écriture ou en lecture. La conversion n’est pas […]

Utilisation de directives X-lists et de préprocesseur pour générer du code C configurable au moment de la compilation

J’ai déjà une base de code contenant du code répétitif, avec seulement des différences mineures, des ID-s sérialisables, des index, des tableaux de variables. La base de code est énorme et certains composants sont activés / désactivés sur la base de directives et de constantes simples du préprocesseur (par exemple: #define CFG_PROJECT cfgAutobot , #define […]