我需要一个可以在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”
答案 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文件路径。