编译程序以在DOS模式下运行

Krz*_*ter 9 c++ dos

我写了一个简单的程序,在DOS模式下运行.一切都在Win XP/Vista/Seven中的模拟控制台下运行,但不在DOS中.错误说:this program caonnot be run in DOS mode.我想知道编译器标志或更大的问题.

对于编程,我使用Code :: Blocks v 8.02进行编译设置:

-Wall -W -pedantic -pedantic-errors

在Project\Build options\Compiler settings中

我尝试了一个干净的DOS模式,从CD启动,并在虚拟机中设置DOS.出现相同的错误.

我应该打开更多的编译器标志吗?一些特定的386/486优化?

UPDATE

好的,我已经下载,安装和配置了DJGPP.甚至解决了libs和包含的一些问题.还有两个问题.

1)我无法编译代码,调用,_strdate并且_strtime我已经仔细检查了包含,正如MSDN所说它需要time.h,但仍然错误说:_strdate was not declared in this scope我甚至尝试添加std :: _ strdate,但后来我有4,不是2个错误同样的

2)第二个代码是关于gotoxy,它看起来像:

#include <windows.h>

void gotoxy(int x, int y)
{
  COORD position;
  position.X = x; position.Y = y;
  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
}
Run Code Online (Sandbox Code Playgroud)

错误说没有windows.h,所以我把它放到位,但是有更多的错误说windows.h中缺少一些错误,我支持它不起作用因为这个函数严格用于windows吗?有没有办法gotoxy为DOS 写类似的?

UPDATE2

1)解决使用time();而不是_strdate();_strtime();这里的代码

time_t rawtime;
struct tm * timeinfo;
char buffer [20];

time ( &rawtime );
timeinfo = localtime ( &rawtime );

strftime (buffer,80,"%Y.%m.%d %H:%M:%S\0",timeinfo);
string myTime(buffer);
Run Code Online (Sandbox Code Playgroud)

它现在在DJGPP下编译.

UPDATE3

仍需要使用代码来解决代码gotoxy - 将其替换为编译的其他代码(在DJGPP下).

感谢所有的帮助.刚学到一些关于编译的新东西(标志,旧的IDE,如DJGPP,OpenWatcom)和刷新的内存设置DOS工作: - )

Jer*_*fin 7

从事物的声音来看,您目前正在编译Windows控制台程序.即使它是一个控制台程序,它仍然需要Windows运行.

要编译一个程序以在真正的DOS上运行,你需要找到一个(可能真的很旧的)编译器和(特别是)目标DOS的链接器并且可以生成DOS MZ可执行文件.最后一个针对MS-DOS的Microsoft编译器是VC++ 1.52c.如果内存服务,Borland继续在稍后的目标DOS上,通过像Broland C++ 5这样的东西.

我相信如果您查看Digital Mars网站,他可能仍然有一个针对DOS的C++编译器.否则,你将被困在寻找使用过的东西并且很老了.

编辑:看其他答案让我想起了DJGPP和OpenWatcom.我很抱歉以前没有提过它们.

请注意,从C++的角度来看,Borland和Microsoft实际上是旧的编译器 - 它们根本不做命名空间,模板支持从微软编译器中不存在到Borland中的平庸.DJGPP基本上是一个DOS扩展器,gcc已被移植到其中; 它过时(或现代)的程度将取决于涉及哪个版本的gcc.如果我没有弄错的话,Digital Mars编译器比Borland编译器更现代,但是Walter Bright现在大部分时间都花在D而不是C++上,所以C++编译器并没有真正与gcc或MSVC竞争,更不用说基于EDG前端的Comeau或Intel.