Sar*_*ica 161 c++ linux windows conditional-compilation ifdefine
我想在Linux和Windows上运行一些c ++代码.有些代码我只希望包含在一个操作系统中,而不包含在另一个操作系统中.是否有标准的#ifdef可以使用?
就像是:
#ifdef LINUX_KEY_WORD
... // linux code goes here.
#elif WINDOWS_KEY_WORD
... // windows code goes here.
#else
#error "OS not supported!"
#endif
Run Code Online (Sandbox Code Playgroud)
问题确实是重复的,但这里的答案要好得多,尤其是被接受的答案.
Muh*_*ser 167
使用:
#ifdef __linux__
//linux code goes here
#elif _WIN32
// windows code goes here
#else
#endif
Run Code Online (Sandbox Code Playgroud)
use*_*227 39
你可以做
#if MACRO0
//code...
#elif MACRO1
//code...
#endif
Run Code Online (Sandbox Code Playgroud)
Macro可以是:
__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
Run Code Online (Sandbox Code Playgroud)
Yas*_*ash 35
我知道这不是答案,但如果有人在Qt看起来相同的话
在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
}
Run Code Online (Sandbox Code Playgroud)
Igo*_*Oks 12
这取决于使用的编译器.
例如,Windows的定义可以是WIN32
或_WIN32
.
Linux的定义可以是UNIX
或__unix__
或LINUX
或__linux__
.
Aja*_*jay 12
此响应不是宏观战争,而是如果找不到匹配平台则产生错误.
#ifdef LINUX_KEY_WORD
... // linux code goes here.
#elif WINDOWS_KEY_WORD
... // windows code goes here.
#else
#error Platform not supported
#endif
Run Code Online (Sandbox Code Playgroud)
如果#error
不受支持,则可以使用static_assert(C++ 0x)关键字.或者您可以实现自定义STATIC_ASSERT,或者只声明一个大小为0的数组,或者让具有重复个案的开关.简而言之,在编译时而不是在运行时产生错误
这取决于编译器.如果你用Linux上的G ++和Windows上的VC++编译,这将做:
#ifdef linux
...
#elif _WIN32
...
#else
...
#endif
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
165722 次 |
最近记录: |