我想知道如何让我的C ++程序在编译器之间运行。我想制作程序,如果它是用borland编译的,它将使用clrscr()
函数,否则它将使用system("CLS")
。我已经看到代码已经做了类似的事情,但我无法找到它的功能或工作方式的解释。任何帮助,将不胜感激。
答案 0 :(得分:8)
通常,要使C或C ++程序跨多个编译器工作,您希望尽可能地将自己限制在标准C或C ++中。有时你必须使用编译器/平台特定的功能,并且通过预处理器处理它的一种方法。
SourceForge上的predef项目列出了一系列预处理程序符号,这些符号由各种编译器自动定义,适用于各种平台,等等。您可以使用该信息来实现您所需的信息,例如:
void clearScreen() {
// __BORLANDC__ is defined by the Borland C++ compiler.
#ifdef __BORLANDC__
clrscr();
#else
system("cls");
#endif
}
答案 1 :(得分:2)
从头顶开始的一个简单的答案是定义自己的函数调用,然后根据编译参数将其转换为实际调用(使用#ifdef预处理定义 - 查看哪些值对应于哪个编译器)。 例如:
#if defined(__COMPILER_ONE__)
#define ClearScreen() clrscr()
#elif defined(__COMPILER_TWO__)
#define ClearScreen() system("CLS")
#else
#error "I do not know what to do!"
#endif
您必须为此创建一个专用的头文件,并将其包含在任何地方。当然。
(当然,您必须将 COMPILER_ONE 和 COMPILER_TWO 替换为相关定义:))
答案 2 :(得分:0)
如何在不同的编译器中创建一些工作是一个简单的问题,非常复杂的答案!您关于清除屏幕的具体问题;
我会这样尝试,首先你有自己的功能说
void clear_screen();
并按照以下方式定义:
void clear_screen()
{
#ifdef LINUX
...
#eleif MS_WIN
...
#endif
}
请注意我刚刚猜到#define是什么。这被称为条件并发症,通常被视为邪恶,但在功能中包含它会减少一点伤害。
答案 3 :(得分:0)
它通常采用的方式是通过预处理器或makefile的魔力。无论哪种方式,您都会在头文件中隐藏实现详细信息,例如void clearscreen()
。然后在单个源文件中,您可以隐藏#ifdef BORLAND背后的Borland实现,对于其他实现也是如此。或者,您可以将每个实现放在一个单独的源文件中,并且只根据makefile中的变量编译正确的实现。
答案 4 :(得分:0)
您可以通过使用#ifdef
编译器宏检查编译器宏来执行此操作:
#ifdef BORLAND
borland();
#else
otherCompiler();
#endif