cmd.exe用哪种语言编写?

时间:2018-07-18 12:31:05

标签: windows cmd command-prompt

  

命令提示符,也称为cmd.exe或cmd(在其可执行文件之后)   文件名),是Windows NT,Windows CE,   OS / 2和eComStation操作系统。它是   在DOS和Windows 9x系统(也称为DOS)中的COMMAND.COM   “ MS-DOS Prompt”),类似于类Unix上使用的Unix shell   系统。

来源:Wikipedia

我到处都搜索过,但是找不到这个问题的答案。

每个网站都关注batch language中使用了cmd.exe的事实,但是我找不到它的书写语言。


所以我的问题是:

在Windows中用于编写命令提示符或cmd.exe的语言是什么?

2 个答案:

答案 0 :(得分:4)

在文本编辑器中打开文件时,该文件包含路径onecore\base\cmd\maxpathawarestring.cpp,这表明至少有一个源文件是用C ++编写的。

Hans Passant的附录:

  

它所依赖的导入使得它很可能是C和C ++的混合体。 longjmpcallocfree之类的CRT函数表示C代码,可能很古老并且可以追溯到command.com时代。显然,它也使用C ++异常处理,C ++是所有最新代码开发的首选武器。混合并不罕见。

还有eryksun

  

在调试器下,很明显,最近对CMD的添加已用C ++编写。 x cmd!*::*显示了对C ++ std名称空间的大量使用

     

[...]

     

但是CMD仍然主要是C,而不是C ++。其命令和支持功能实现为C函数,例如eExiteChdirParseStatementSearchForExecutableExecPgm。他们还没有将所有这些旧C代码移植到OOP设计中。

所以我会混合使用C和C ++。

答案 1 :(得分:0)

MS的Rich Turner正式确认,它最初是用C编写的。

  

Cmd是完全用'C'编写的Win32应用程序-这很重要,因为NT的主要目标之一是可以在许多不同的处理器和机器体系结构之间移植。

     

https://blogs.msdn.microsoft.com/commandline/2017/01/04/rumors-of-cmds-death-have-been-greatly-exaggerated/

但是到目前为止它的一部分已迁移到C ++

  

在Windows控制台内部

     

Windows控制台是传统的Win32可执行文件,尽管最初是用C语言编写的,但是随着团队对控制台代码库进行现代化和模块化,许多代码都已迁移到现代C ++。

     
    

对于那些关心此类事情的人:许多人问Windows是用C还是C ++编写的。答案是-尽管NT是基于对象的设计-像大多数OS一样,Windows几乎完全是用C编写的。为什么? C ++在内存占用量和代码执行开销方面带来了成本。即使在今天,用C ++编写的代码的隐藏成本也可能令人惊讶,但是在1990年代后期,当内存成本约为60美元/ MB(是的...每个MEGABYTE!60美元!)时,vtables等的隐藏内存成本仍然很高。此外,虚拟方法调用间接和对象取消引用的成本可能导致当时C ++代码的性能和规模上的巨大损失。尽管仍然需要谨慎,但是现代C ++在现代计算机上的性能开销却很少受到关注,并且考虑到其安全性,可读性和可维护性优势,这通常是可以接受的折衷……这就是为什么我们稳定地将控制台的代码升级到现代C ++。

  
     

Windows Command-Line: Inside the Windows Console

如果查看latest Windows Console’s internals structure,您会发现它使用了MapCollection,这表明它可能使用了某些C ++ / CX

Windows Console Text Buffer Architecture

  

从顶部开始(原始缓冲区的蓝色框):

     
      
  • ScreenInfo –维护有关视口等的信息,并包含一个TextBuffer      
        
    • TextBuffer –将控制台的文本区域表示为行的集合      
          
      • Row –唯一表示控制台中的每个CharRow以及应用于每一行的格式设置属性      
            
        • CharRow –包含CharRowCells的集合,以及处理行换行和导航的逻辑和状态      
              
          • CharRowCell –包含实际单元格的文本,以及一个DbcsAttribute字节,其中包含特定于单元格的标志
          •   
        •   
      •   
    •   
  •   

您可以在Windows command line blog

中找到更多包含详细信息的漂亮文章。