Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

connaitre le système...???

7 réponses
Avatar
blackhorus
est-ce qu'il existe un moyen de tester la plateforme, pour savoir si on
est sous windows, on execute (commande1.exe), ou sous linux et executer
(commande2) ... bien sur avec C++, de fa=E7on =E0 compiler ce m=EAme
programme sous les deux plateformes...

7 réponses

Avatar
Arnaud Meurgues
blackhorus wrote:
est-ce qu'il existe un moyen de tester la plateforme, pour savoir si on
est sous windows, on execute (commande1.exe), ou sous linux et executer
(commande2) ... bien sur avec C++, de façon à compiler ce même
programme sous les deux plateformes...


A priori, un compilateur définit toujours une macro qui lui est propre.

Par exemple, msvc définit _MSC_VER.

On peut donc include dans un programme quelque chose comme :

#if defined(_MSC_VER)
# include <windows.h>
#else
# include <unix.h>
#endif

Bon, là, ça suppose que sous windows, on ne compilera qu'avec msvc, mais
c'est un exemple de ce qu'on peut faire.

--
Arnaud

Avatar
Fabien LE LEZ
On 30 Jul 2005 06:12:20 -0700, "blackhorus" :

est-ce qu'il existe un moyen de tester la plateforme, pour savoir si on
est sous windows


Généralement, ceci fonctionne :

#ifdef __WIN32__

Avec, bien sûr, les avertissements d'usage sur ce genre de méthode :
il est fort possible qu'une meilleure solution soit un .h avec
l'interface commune et un .cpp d'implémentation par plate-forme.
Exemple : machin.h mais machin.win32.cpp, machin.macosx.cpp et
machin.linux.cpp.

Avatar
Matthieu Moy
Fabien LE LEZ writes:

Avec, bien sûr, les avertissements d'usage sur ce genre de méthode :
il est fort possible qu'une meilleure solution soit un .h avec
l'interface commune et un .cpp d'implémentation par plate-forme.
Exemple : machin.h mais machin.win32.cpp, machin.macosx.cpp et
machin.linux.cpp.


Et en général, un script de configuration (par exemple un truc à base
d'autotools) executé avant la compilation fera du meilleur boulot
qu'un ensemble de macros du préprocesseur.

--
Matthieu

Avatar
Richard Delorme
On 30 Jul 2005 06:12:20 -0700, "blackhorus" :


est-ce qu'il existe un moyen de tester la plateforme, pour savoir si on
est sous windows



Généralement, ceci fonctionne :

#ifdef __WIN32__


plutôt:
#ifdef _WIN32

--
Richard


Avatar
kanze
blackhorus wrote:

est-ce qu'il existe un moyen de tester la plateforme, pour
savoir si on est sous windows, on execute (commande1.exe), ou
sous linux et executer (commande2) ... bien sur avec C++, de
façon à compiler ce même programme sous les deux
plateformes...


La décision, évidemment, se fait lors de la compilation, et non
lors de l'exécution -- une exécutable Windows ne tourne pas sous
Linux, et vice versa.

La solution que j'ai toujours adoptée, c'est de maintenir deux
répertoires avec des fichiers d'en-tête, voir les sources, et de
choisir le répertoire au moyen de la ligne de commande du
compilateur (qui dépend de toute façon du système, et même du
compilateur).

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
blackhorus
est-ce que gcc (bien sur la distrib cygwin) définit ce symbole, ou
c'est simplement propore à cl (compilateur de microsoft) ???
Avatar
Falk Tannhäuser
blackhorus wrote:

est-ce que gcc (bien sur la distrib cygwin) définit ce symbole, ou
c'est simplement propore à cl (compilateur de microsoft) ???


gcc ne définit que
#define __CYGWIN__ 1
#define __CYGWIN32__ 1

Bon à savoir: Quand on lui passe les options -E -dM et un fichier
source vide, gcc affiche tous les symboles de préprocesseur prédéfinis.

Falk