我怎么知道我在做什么操作系统?

时间:2013-06-18 12:17:32

标签: c++ c

我需要一个可以在Linux和Windows中清除屏幕的功能。为此,我想知道是否有一些说明可以告诉我我正在使用的操作系统。 我搜索了解决方案,我找到了以下代码:

void clear_screen()
{
   #ifdef WINDOWS

    std::system ( "CLS" );

    #else

    // Assume POSIX

    std::system("clear");

    #endif
}

此功能有两个问题:

  • 我不明白。

    - >对于#ifdef WINDOWS,WINDOWS定义在哪里?

  • 此代码适用于Linux,但在Windows中不起作用。

注意:

  • 我正在使用Windows XP。

  • 我不想要任何非标准功能...例如“curses”

4 个答案:

答案 0 :(得分:7)

您正在寻找

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

#ifdef __unix__

这些是由编译器定义的,不存储在头文件中。因此,您不需要先#include一个文件,这些#ifdef将始终给出正确的结果(除非您弄乱编译器)

答案 1 :(得分:7)

_WIN32__gnu_linux____linux__等宏由相关编译器定义。您可以找到预定义编译器宏here的完整列表。

_WIN32是为Windows的32位和64位环境定义的。

答案 2 :(得分:2)

WINDOWS由您的编译器定义,因此该定义可以依赖于编译器。根据您的操作系统编译特定代码非常有用。

答案 3 :(得分:1)

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

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