Voici la situation: J'ai trois fichiers, Test1.cpp et Test2.cpp. Test1.cpp peut être compilé tel quel dans une application autonome. Test1.cpp contient également certaines fonctions que je voudrais réutiliser dans Test2.cpp. J'utilise un #endifef #endif pour exclure conditionnellement la fonction principale de Test1.cpp afin que lorsque je compile Test2.cpp, la fonction principale de Test2.cpp puisse appeler les fonctions définies dans Test1.cpp. Exemple de code:En ce qui concerne le préprocesseur C++ en utilisant #define pour exclure conditionnellement une fonction principale
--------------------------------------------
//File: Test1.h
#include <iostream>
void do_something();
--------------------------------------------
//File: Test1.h
#include "Test1.h"
void do_something();
{
std::cout<<"Done"<<std::endl;
}
#ifndef FN_MAIN
int main()
{
do_something();
return 0;
}
#endif
--------------------------------------
//File: Test2.cpp
#define FN_MAIN
#include "Test1.h"
int main()
{
do_something();
return 0;
}
--------------------------------------
Appel g ++ avec test1.cpp fonctionne très bien et se comporte comme prévu, mais appeler g ++ avec test2.cpp et test1.cpp échoue parce que principal obtient défini plusieurs fois. Cependant, appeler g ++ avec -DFN_MAIN et les deux fichiers sources résout ce problème. Y a-t-il un moyen de contourner cela? Je pense que ce problème provient de ma compréhension incomplète du préprocesseur C++.
Remarque: Ma motivation pour ce faire est de réduire la taille du code sur le projet sur lequel je travaille. Le projet réel inclut à la fois une version autonome de Test1.cpp et plusieurs autres programmes qui utilisent des fonctions de Test1.cpp.
Mettez principal dans un fichier source. Créez 'Test1_lib.h' et' Test1_lib.cpp' avec tout autre que 'main', puis placez' main' dans 'Test1_main.cpp'. Alors Test2 peut utiliser Test1_lib sans aucun conflit. Beaucoup plus propre, et évite le désordre macro. – Tim