我希望我的代码能够根据编译所在的操作系统执行不同的功能。我正在寻找类似于以下代码:
#ifdef OSisWindows
// do Windows-specific stuff
#else
// do Unix-specific stuff
#endif
有没有一种方法可以做到这一点?是否有更好的方法来完成同样的事情?
我希望我的代码能够根据编译所在的操作系统执行不同的功能。我正在寻找类似于以下代码:
#ifdef OSisWindows
// do Windows-specific stuff
#else
// do Unix-specific stuff
#endif
有没有一种方法可以做到这一点?是否有更好的方法来完成同样的事情?
#define OSsymbol
和#ifdef OSsymbol
,其中OSsymbol是一个可以进行#define
的符号,用于标识目标操作系统。#ifdef _WIN32
std::cout << "Running on Windows" << std::endl;
#elif __linux__
std::cout << "Running on Linux" << std::endl;
#elif __APPLE__
std::cout << "Running on macOS" << std::endl;
#else
std::cout << "Unknown operating system" << std::endl;
#endif
#if defined(_WIN32) || defined(_WIN64) || defined(__WINDOWS__)
#error Windows_OS
#elif defined(__linux__)
#error Linux_OS
#elif defined(__APPLE__) && defined(__MACH__)
#error Mach_OS
#elif defined(unix) || defined(__unix__) || defined(__unix)
#error Unix_OS
#else
#error Unknown_OS
#endif
#include <stdio.h>
int main(void)
{
return 0;
}
#warning
可能更好,以避免停止编译,但似乎只适用于GCC而不是MSVC。 - not2qubit_WIN32
宏,但没有__WIN32__
。我还查看了存档版本 - https://web.archive.org/web/20100422132954/http://msdn.microsoft.com:80/en-us/library/b0084kay(VS.80).aspx - 也列出了_WIN32
但没有__WIN32__
。 - AJM我编写了一个小型库,用于获取您所在的操作系统,它可以使用clib(C包管理器)进行安装,因此非常简单,您可以将其作为项目的依赖项。
$ clib install abranhe/os.c
#include <stdio.h>
#include "os.h"
int main()
{
printf("%s\n", operating_system());
// macOS
return 0;
}
它返回一个字符串(char*
),其中包含您正在使用的操作系统的名称,有关此项目的更多信息,请查看Github上的文档。
C
而不是C++
。 - ilgaar