我写了一个简单的程序,在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
仍需要使用代码来解决代码 - 将其替换为编译的其他代码(在DJGPP下).gotoxy
感谢所有的帮助.刚学到一些关于编译的新东西(标志,旧的IDE,如DJGPP,OpenWatcom)和刷新的内存设置DOS工作: - )
从事物的声音来看,您目前正在编译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.