J'ai déjà eu des problèmes lorsque j'ai essayé de transférer du code C++ écrit sur Mac OS X vers un système Linux, ou d'essayer de compiler du code écrit sur une ancienne version de gcc/g ++ avec un code plus récent:Comment puis-je contrôler la manière dont gcc/g ++ inclut automatiquement les en-têtes?
Il semble que certaines versions (plus anciennes?) De gcc/g ++ incluraient automatiquement des fichiers d'en-tête pour vous. Par exemple, le code qui utilise printf
doit exiger #include <stdio.h>
. Et le code qui utilise memcpy
devrait exiger #include <string.h>
. Mais en fonction de la version de gcc que j'utilise, il sera parfois inclus pour moi.
Il fait des ravages lorsque j'oublie d'inclure quelque chose et puis jamais obtenir des erreurs jusqu'à ce que je vais compiler le code sur un autre système. À ce stade, il s'agit d'un jeu de courir partout dans le projet et de fixer les inclus.
Est-ce que quelqu'un d'autre a rencontré cela? Existe-t-il un moyen de forcer gcc à s'auto-exclure ou à ne pas s'auto-exclure? Ou, est-il un moyen de savoir ce c'est autoincluding?
Peut être si gcc-t-il, il serait automatiquement devenu trop subtil pour elle de comprendre les noms des mêmes méthodes dans les différentes bibliothèques. Mais s'il y a une solution automatique, j'aimerais savoir. –
Etes-vous sûr que ce ne sont pas les autres en-têtes qui tirent ceux-là, et sur les autres plates-formes qui ne le font pas? –
gcc n'inclut pas "auto-include" - vous n'obtenez probablement que des inclusions indirectes via des en-têtes explicitement # inclus, comme le suggère Preet ci-dessus. Bottom line: vous devez corriger votre code. –