Articles of c preprocessor

Comment définir une macro AC avec plusieurs instructions

J’essaie de définir une macro qui a deux lignes / instructions, c’est comme: #define FLUSH_PRINTF(x) printf(x);fflush(stdout); mais cela ne peut pas fonctionner en raison de la limite avec laquelle les macros C ne peuvent pas fonctionner avec ‘;’. Y a-t-il un moyen raisonnable de contourner le problème? PS: Je sais que l’exemple supérieur est bizarre […]

Macro commune pour identifier un système dérivé d’UNIX? (Linux, OSX, BSD, …)

Je me demande pourquoi sur MacOSX la macro __unix__ n’est pas définie. MacOSX n’est-il pas un dérivé BSD UNIX? Si je définis la macro __unix__ dans mon code, pourrais-je avoir des problèmes? En général, lors de la vérification de la plate-forme actuelle, je préfère faire quelque chose comme: #ifdef __unix__ … #endif au lieu de: […]

Extension de la macro C dans le code du kernel Linux

J’ai généralement ignoré l’utilisation de macros en écrivant en C, mais je pense connaître les principes fondamentaux à leur sujet. Pendant que je lisais le code source de la liste dans le kernel Linux, j’ai vu quelque chose comme ça: #define LIST_HEAD_INIT(name) { &(name), &(name) } #define LIST_HEAD(name) \ struct list_head name = LIST_HEAD_INIT(name) (Vous […]

Comment le kernel Linux maintient-il la grande quantité d’options de configuration?

Cette question concerne la maintenance et les tests de la configuration. Lorsqu’elles sont mal utilisées, les instructions de préprocesseur #ifdef, #ifndef, #elseif, #elif, #else, #endif diminuent non seulement la lisibilité et la maintenabilité du code C, mais elles augmentent également le risque de bogues de régression (par exemple, la configuration de la construction n’a pas […]

Préprocesseur C ++

J’ai réécrit un simple programme C ++ utilisant unix comme nom de variable. Mais la compilation du programme a échoué. #include int main() { int unix = 1; return 0; } Après avoir beaucoup cherché sur internet, je suis arrivé sur ce site qui m’a aidé en disant que unix est une macro prédéfinie égale […]

Découvrir ce que le chemin d’inclusion GCC est

J’essaie de trouver par programmation le chemin #include sous Linux, ce que je comprends, en pratique signifie trouver ce que GCC considère comme tel. (Est-ce que c’est vrai? Comment Clang le fait-il?) Selon http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html, certains des composants impliquent l’architecture du processeur et la version de GCC; cette dernière en particulier semble délicate; Je suppose que […]

Comment le préprocesseur C gère-t-il les dépendances circulaires?

Je veux savoir comment le préprocesseur C gère les dépendances circulaires (de #defines). Ceci est mon programme: #define ONE TWO #define TWO THREE #define THREE ONE int main() { int ONE, TWO, THREE; ONE = 1; TWO = 2; THREE = 3; printf (“ONE, TWO, THREE = %d, %d, %d \n”,ONE, TWO, THREE); } Voici […]

Pourquoi le préprocesseur C interprète-t-il le mot “linux” comme constante “1”?

Pourquoi le préprocesseur C de GCC interprète-t-il le mot linux (lettres minuscules) comme constante 1 ? test.c: #include int main(void) { int linux = 5; return 0; } Résultat de $ gcc -E test.c (arrêt après la phase de prétraitement): …. int main(void) { int 1 = 5; return 0; } Quel -de cours – […]

Préprocesseur de la version Windows et construction pour la compatibilité ascendante?

J’ai deux machines, l’une exécutant Vista Ultimate 32, l’autre exécutant XP SP3. la même version de VS2008 est installée sur les deux machines. J’ai construit boost 1,50.0 sur la première machine (Vista), puis la librairie libtorrent, qui repose sur le boost. J’ai vu dans certaines instructions de compilation de libtorrent que la version gagnante était […]

Incohérence proche et lointaine

Je suis passé en revue et en train de refactoriser du code. J’ai fini par changer une fonction de: void setPerspective(float nearP = 0.1f, float farP = 1000.0f); à void setPerspective(float near = 0.1f, float far = 1000.0f); et a commencé à avoir beaucoup d’étrange ‘missing ;’ et ‘missing )’ erreurs. Il semble que near […]