Windows 和 Linux 上的 C++ 编译:ifdef 开关[重复]
- 2024-10-18 09:00:00
- admin 原创
- 66
问题描述:
我想在 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
这个问题确实是重复的,但这里的答案要好得多,尤其是被接受的答案。
解决方案 1:
使用:
#ifdef __linux__
//linux code goes here
#elif _WIN32
// windows code goes here
#else
#endif
解决方案 2:
您可以执行以下操作:
#if MACRO0
//code...
#elif MACRO1
//code...
#endif
…其中标识符可以是:
__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
_WIN32 Defined on Windows
解决方案 3:
我知道这不是答案,但如果有人在 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
}
解决方案 4:
这取决于所使用的编译器。
例如,Windows 的定义可以是WIN32
或_WIN32
。
并且Linux的定义可以是UNIX
或__unix__
或LINUX
或__linux__
。
解决方案 5:
这个反应不是宏观战争,而是如果找不到匹配的平台就会产生错误。
#ifdef LINUX_KEY_WORD
... // linux code goes here.
#elif WINDOWS_KEY_WORD
... // windows code goes here.
#else
#error Platform not supported
#endif
如果#error
不支持,您可以使用 static_assert (C++0x) 关键字。或者您可以实现自定义 STATIC_ASSERT,或者只声明一个大小为 0 的数组,或者使用具有重复案例的 switch。简而言之,在编译时而不是运行时产生错误
解决方案 6:
这取决于编译器。如果你在 Linux 上使用 G++ 进行编译,在 Windows 上使用 VC++ 进行编译,那么将会这样:
#ifdef linux
...
#elif _WIN32
...
#else
...
#endif
解决方案 7:
不,这些定义依赖于编译器。您可以做的是,使用您自己的一组定义,并将它们设置在 Makefile 上。有关更多信息,请参阅此线程。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD