Récemment, j'ai rencontré un problème très ennuyeux. J'ai besoin de compiler d'anciens codes C++ qui ont été compilés avec une très ancienne version g ++ 4.1.2.Comment faire g ++ ne distingue pas <string> et <string.h>
Je ne pouvais pas trouver de version g ++ aussi ancienne maintenant, alors j'ai utilisé g ++ 4.4.7 pour le compiler, mais il y avait beaucoup d'erreurs comme error: ‘snprintf’ was not declared in this scope
.
Après quelques travaux, j'ai trouvé g ++ 4.1.2 ne distinguent pas <string>
de <string.h>
, également <stdio>
de <stdio.h>
, etc .. Mais g ++ 4.4.7 T-ELLE. Donc ces erreurs sont arrivées.
Pour certaines raisons, je ne pouvais pas modifier l'ancien code source. Y at-il un moyen qui peut faire le plus récent g ++ ignorer la différence entre <string>
et <string.h>
? Créez un répertoire dans votre projet (appelons le foo
);
'' srting' et string.h' sont différents en-têtes. Si la version antérieure ne se différencie pas, cela peut probablement être considéré comme un bug. Je ne peux pas voir que vous pouvez dire 'g ++' de ne pas les différencier. – taskinoor
Comme solution de contournement, vous pouvez forcer gcc à toujours inclure '' avec '-include' –
Jarod42
Je suis sûr que gcc 2.95.3 a bien compris, donc je ne pense pas qu'il y ait eu une régression autour de 4.1.2. Au lieu de cela, je pense que vous mélangez des règles C et C++. Les en-têtes C++ _may_ incluent d'autres en-têtes. En particulier, '' _may_ comprend ''. Vous ne pouvez pas compter sur cela de toute façon. –
MSalters