Je veux exécuter du code c ++ sur Linux et Windows. Il y a des morceaux de code que je veux inclure uniquement pour un système d'exploitation et pas pour l'autre. Existe-t-il un standard # ifdef qu'une fois utilisable?
Quelque chose comme:
#ifdef LINUX_KEY_Word
... // linux code goes here.
#Elif WINDOWS_KEY_Word
... // windows code goes here.
#else
#error "OS not supported!"
#endif
La question est en fait un doublon mais les réponses ici sont bien meilleures, surtout celle acceptée.
utilisation:
#ifdef __linux__
//linux code goes here
#Elif _WIN32
// windows code goes here
#else
#endif
Tu peux faire
#if MACRO0
//code...
#Elif MACRO1
//code...
#endif
Où la macro peut être:
__linux__ Defined on Linux
__Sun Defined on Solaris
__FreeBSD__ Defined on FreeBSD
__NetBSD__ Defined on NetBSD
__OpenBSD__ Defined on OpenBSD
__Apple__ Defined on Mac OS X
__hpux Defined on HP-UX
__osf__ Defined on Tru64 UNIX (formerly DEC OSF1)
__sgi Defined on Irix
_AIX Defined on AIX
Je sais que ce n’est pas une réponse, mais une addition si quelqu'un qui cherche le même
En Qt
https://wiki.qt.io/Get-OS-name-in-Qt
QString Get::osName()
{
#if defined(Q_OS_Android)
return QLatin1String("Android");
#Elif defined(Q_OS_BLACKBERRY)
return QLatin1String("blackberry");
#Elif defined(Q_OS_IOS)
return QLatin1String("ios");
#Elif defined(Q_OS_MAC)
return QLatin1String("osx");
#Elif defined(Q_OS_WINCE)
return QLatin1String("wince");
#Elif defined(Q_OS_WIN)
return QLatin1String("windows");
#Elif defined(Q_OS_LINUX)
return QLatin1String("linux");
#Elif defined(Q_OS_UNIX)
return QLatin1String("unix");
#else
return QLatin1String("unknown");
#endif
}
Cette réponse ne concerne pas la guerre des macro, mais génère une erreur si aucune plateforme correspondante n'est trouvée.
#ifdef LINUX_KEY_Word
... // linux code goes here.
#Elif WINDOWS_KEY_Word
... // windows code goes here.
#else
#error Platform not supported
#endif
Si #error
n'est pas pris en charge, vous pouvez utiliser le mot clé static_assert (C++ 0x). Ou vous pouvez implémenter STATIC_ASSERT personnalisé, ou simplement déclarer un tableau de taille 0, ou avoir un commutateur ayant des cas dupliqués. En bref, produire une erreur à compilation et non à exécution
Cela dépend du compilateur utilisé.
Par exemple, la définition de Windows peut être WIN32
ou _WIN32
.
Et la définition de Linux peut être UNIX
ou __unix__
ou LINUX
ou __linux__
.
Cela dépend du compilateur. Si vous compilez avec, par exemple, G ++ sous Linux et VC++ sous Windows, vous obtiendrez ce résultat:
#ifdef linux
...
#Elif _WIN32
...
#else
...
#endif
Non, ces définitions dépendent du compilateur. Ce que vous pouvez faire, utilisez votre propre ensemble de définitions et définissez-les sur le Makefile. Voir ce fil pour plus d'informations.