C++ 我如何知道什么是操作系统I';我在哪里工作?

C++ 我如何知道什么是操作系统I';我在哪里工作?,c++,c,C++,C,我需要一个功能,可以清除Linux和Windows中的屏幕。要做到这一点,我想知道是否有一些指令可以告诉我使用的是什么操作系统。 我已搜索解决方案,并找到以下代码: void clear_screen() { #ifdef WINDOWS std::system ( "CLS" ); #else // Assume POSIX std::system("clear"); #endif } 此功能有两个问题: 我不明白 ->对于#ifde

我需要一个功能,可以清除Linux和Windows中的屏幕。要做到这一点,我想知道是否有一些指令可以告诉我使用的是什么操作系统。 我已搜索解决方案,并找到以下代码:

void clear_screen()
{
   #ifdef WINDOWS

    std::system ( "CLS" );

    #else

    // Assume POSIX

    std::system("clear");

    #endif
}
此功能有两个问题:

  • 我不明白

    ->对于
    #ifdef窗口
    ,在哪里定义了窗口

  • 这段代码在Linux中可以工作,但在Windows中不工作

注:

  • 我正在使用Windows XP

  • 我不想要任何非标准的功能。。。这样的“诅咒”

您正在寻找的

// Windows, all variants (including 64-bit and ARM)
#ifdef _WIN32


它们由编译器定义,不存储在头文件中。因此,您不需要首先包含文件,这些ifdef总是会给出正确的结果(除非您弄乱了编译器)

是由编译器定义的,因此此定义可能依赖于编译器。它可以根据您的操作系统编译特定代码。

宏,如
\u WIN32
\uu gnu\u linux\uuuuu
\uuu linux\uuuu
由相关编译器定义。您可以找到预定义编译器宏的完整列表


\u WIN32
是为Windows的32位和64位环境定义的。

有各种依赖于编译器的宏。不幸的是,它们不是特别有用,因为它们不是标准化的,而且特定操作系统的C编译器不一定定义它们。我还怀疑它们实际上违反了C标准C117.1.3


将在所有C编译器上编译的100%可移植解决方案就是自己创建这样一个常量。由于C是一种编译语言,您必须为每个操作系统编译不同的代码。只需添加一个名为
os.c
的文件,在其中放置一个相关的
#define
或常量,然后将其链接到您的程序。在为不同的操作系统编译时,您需要更改的唯一一件事是将文件路径设置为您的操作系统特定的
OS.c

+1,但您可能还应该解决第二部分的问题“这些文件在哪里定义”thx。。。但是对于任何Windows版本(XP、Vista、7、8)32位和64位,都是“_WIN32”@BBeta适用于每一个超过16位的窗口,因为您没有列出MS DOS,所以应该可以。
#ifdef __unix__