Windows的cmd运行编译器(cmd运行c/c++、python等)
目录一、cmd.exe二、cmd.exe运行编译器gcc.exe/g.exe执行C/C程序代码三、gcc.exe与g.exe的区别及其使用注意事项1、文件格式问题2、标准库问题3、语法规范问题4、extern C声明问题与重载函数(overloaded function)四、cmd运行python解释器执行python程序代码Windows的cmd运行编译器(cmd运行c/c、python等)希望这篇文章对你有帮助https://shop197191312.taobao.com/谢谢前面我们已讲述了编译器(Compiler)及C/C编译器安装(c安装)中的一、五已经提到任何一种编程语言只要安装了这个编程语言的编译器(compiler)在windows平台中可以使用cmd调用该编译器运行该编程语言的程序代码。下面我们以C/C为例讲述windows的cmd.exe 运行C/C其它编程语言类似只是编译器不同。下面讲到的C/C编译器是基于MinGW-w64编译器套件的。一、cmd.exe简介cmd是 Windows 系统的一种命令行操作工具用户可以通过输入命令来完成各种各样的系统或程序操作。我们使用winr快捷键(也即WindowsR)打开运行窗口输入cmd并确定打开cmd命令提示符窗口进入图1-1界面右键cmd.exe顶部可以在弹出的菜单中选择属性进行设置可以设置颜色、字体等。图1-1 cmd.exe在使用cmd时需要熟悉windows的一些CMD命令下面列出几个cmd命令按ctrc键cmd.exe中退出正在执行的命令操作即中断执行命令cls:清屏清除cmd屏幕的历史输入cd: 全称change directory进入某目录(改变目录)cd 目录名为进入当前路径里的某个目录cd 目录1\目录2\目录3为进入当前路径里的子路径(多级目录构成的子路径)cd..为返回到上一级目录cd\为返回到根目录盘符进入某个盘符直接输入盘符即可比如输入D:则返回到根目录盘符D:\help:显示常用的命令(有些命令没显示出)help 命令名显示该命令名的基本使用。CMD命令有很多使用这些命令能实现目录操作、网络操作、进程操作、服务操作运行操作、计算机控制操作等。二、cmd.exe运行编译器gcc.exe/g.exe执行C/C程序代码我们以C语言为例。依据C语言的语法规范我们把c代码写到.txt文件中并保存为.c后缀的文件我们把下面代码保存到cr.txt记事本中。#includestdio.hintmain(void){inti;for(i 50; i 100; i) {if(i%50)printf(%d , i); }printf(\n); }然后改cr.txt的后缀变成cr.c。在改后缀前应该先打开文件夹并单击查看图标勾选文件扩展名如图2-1所示这样显示扩展名才能成功修改后缀否则隐藏了扩展名实际修改为cr.c.txt运行时也就会提示No such file or directoryno input files。图2-1 文件夹的文件扩展名启动cmd命令行窗口在窗口输入如图2-2所示的操作即可实现cr.c程序的运行。图2-2 cmd.exe运行c第一行操作cd cj是进入文件夹cj文件cr.c在该文件夹中第二行操作gcc cr.c为调用gcc.exe编译器编译cr.c文件默认生成文件名为a.exe可执行文件第三行操作运行可执行文件a.exe第四行操作gcc cr.c -o cr.exe为调用gcc.exe编译器编译cr.c文件且生成指定文件名为cr.exe可执行文件o相当于output的简写。第五行操作运行可执行文件cr.exe。注意上面提到的生成文件的后缀在不同操作系统时不同的在windows生成的是.exe后缀格式在linux系统生成的是.out后缀格式。在cmd.exe中编辑或查看cr.c文件可以使用命令notepad cr.c如图2-3所示以文本编辑器打开cr.c文件打开后就可以编辑(写)代码了保存即可。图2-3 cmd文本编辑器打开cr.cc(c plus plus)是在c的基础上发展出来的面向对象编程因而c语言的代码规范通常也适合c(也即C语言的代码通常都可以用于C)当然也有特殊情形毕竟后者是面向对象的是在前者基础上的扩充。上面的代码也可以保存为cr.cpp称为C文件后缀cpp也就是c plus plus的简写。我们也可以用gcc.exe来编译C文件cr.cpp下面图2-4运行了c文件cr.cpp和c文件cr.c。图2-4 cmd.exe运行c上面都是先把程序通过编译器gcc.exe编译成可执行文件.exe然后执行该文件即可实现程序的执行。一般来讲使用gcc.exe或g.exe编译器都可以编译c和c但它们也有一定差异。另外c/c运行程序程序中通常有一个主函数main。三、gcc.exe与g.exe的区别及其使用注意事项gcc.exe或g.exe运行并不是单个文件就能运行它们都有依赖项(依赖文件)与依赖项构成编译功能。1、文件格式问题gcc.exe在编译时将.c文件视为 C 文件(C源码文件)将.cpp文件视为C文件(C源码文件)而g.exe在编译时将 .c 和 .cpp 文件都视为C文件(也即都作为.cpp文件)。2、标准库问题使用gcc.exe编译.cpp程序时如果程序需要链接到C标准库(C Standard Library)gcc.exe默认情况下不会链接到C标准库需要使用选项参数(也称为flag)-lstdc让编译器gcc.exe能连接到c标准库。而用g.exe编译.cpp程序时能自动连接C标准库。C标准库(C Standard Library)是C自带的库。#includeiostreamusingnamespacestd;intmain(){inti3; cout i endl;return0; }上面代码用g main.cpp可以编译但gcc main.cpp 运行提示undefined reference to std::ostream::operator因为gcc.exe编译器不能链接到C标准库需要增加选项参数-lstdc才能链接到C标准库即使用命令gcc main.cpp -lstdc可以链接到C标准库并完成编译。3、语法规范问题c(c plus plus)是在c的基础上发展出来的面向对象编程因而c语言的代码规范通常也适合c(也即C语言的代码通常都可以用于C)但也有特殊情形毕竟后者是面向对象的是在前者基础上的扩充两者的代码规范仍然有一定的差异当出现这种情形时g.exe编译.c文件时把.c文件当着C文件进行编译可能会报错。#includestdio.hintmain(void){intnew2;printf(new%d\n,new);returnnew; }上面代码用gcc main.c可以运行但用g main.c会报错提示expected unqualified-id before new因为g main.c是把.c文件当着.cpp来编译而new是 C 中是保留关键字不能用作变量名称。因此在cmd.exe操作中对于c程序我们最好用gcc.exe对于c程序我们最好用g.exe。gcc.exe和g.exe是两个独立的编译器它们没有互相调用的关系。4、extern C声明问题与重载函数(overloaded function)在c代码中出现 extern C void func(int x, int y)表示调用c中的函数。由于c中支持重载函数(overloaded function函数重载)也即只要函数参数有差异(参数个数参数类型)函数名可以相同这在c或python等语言中是不支持这种形式的因为它们的编译特点不支持区分。在c中编译后的函数符号(函数名称)与原函数名和函数参数有关而在c中编译后的函数符号(函数名称)只与原函数名有关比如void func(int x, int y)在c中我们可以理解为类似编译为_func_int_int名称但void func(int x, int y)在c中编译为_func名称实际如何编译与编译器有关。因此在c中只要参数有差异同名的函数名编译后还是能区分的但在c中即使参数不同同名的函数编译后是不能区分的同理python也是类似。在c增加extern C声明后即extern C void func(int x, int y)则是告诉c编译器是调用c中的函数而不是调用c中的函数但知道调用哪个func函数后函数func的代码是按C还是按C编译由编译器决定。/*头文件func.h*/#includestdio.hvoidfunc();//声明declare/*C文件func.c*/#includefunc.hvoidfunc(){printf(Hi!\n); }/*C文件main.cpp*/#includefunc.hintmain(){func();return0; }上述三个文件使用命令gcc main.cpp func.c -o kk编译会报错提示undefined reference to func()这是因为main.cpp是按C编译main.cpp中的func编译后的符号名称与原函数名和参数有关而命令中的func.c编译后的符号名称只与原函数名有关因而两者是不能匹配的因此会出现找不到函数名的错误。但用g main.cpp func.c -o kk命令是可行的因为命令中main.cpp和func.c都是按.cpp编译因而编译后的func的函数符号名称是能够匹配的。我们在main.cpp中增加extern C声明记为main1.cpp文件externCvoidfunc();intmain(){func();return0; }注意代码中需要去掉#include func.h语句再增加extern语句若保留include语句相当于先调用函数后extern C声明产生冲突去掉该语句后先声明然后调用才符合逻辑关系。这时候使用命令gcc main1.cpp func.c -o kk是可行的这时main.cpp中函数func调用已指定使用.c文件的而命令func.c也是按C文件编译因此两者能匹配成功调用关系可行。但命令g main1.cpp func.c -o kk会报错提示undefined reference to func()因为main.cpp中函数func调用已指定使用.c文件的而命令中的func.c按.cpp编译两者不能匹配因此调用关系不可行。当然也可以不在c中extern C声明而在.h头文件中进行extern C声明也可以达到这种效果。我们把头文件func.h中的代码增加条件判断修改后的文件仍记为func.h文件(也可以记为其它名称但其它文件调用的这个头文件名称也要修改#ifdef__cplusplus//两个下划线_externC{#endif#includestdio.hvoidfunc();#ifdef__cplusplus}#endif这种修改相当于增加条件判断语句也就是判断为c文件则进行extern C声明否则不声明。这时候使用命令gcc main.cpp func.c -o kk是可行的这时main.cpp中函数func调用已指定使用.c文件的(头文件进行了判断选择)而命令func.c也是按C文件编译(头文件进行了判断选择)因此两者能匹配成功调用关系可行。命令g main.cpp func.c -o kk也是可行的因为main.cpp中函数func调用已指定使用.c文件(头文件进行了判断选择)而命令中的func.c的代码虽然是按.cpp编译但也已指定调用.c文件(头文件进行了判断选择)因此两者能匹配成功调用关系可行。此外更多的gcc操作选项(操作参数)可以参考https://gcc.gnu.org/对应版本的GCC的documentation说明。四、cmd运行python解释器执行python程序代码CMD.exe运行python程序代码原理类似cmd运行c/c。依据python语言的语法规范我们把python代码写到.txt文件中并保存为.py后缀的文件我们把下面代码保存到pr.txt记事本中。d0100classAA: a1 2def__init__(self, b1): self.b1 b1deffunc(self): ge1d0self.a1self.b1returnge1print(AA(1).func())然后改pr.txt的后缀变成pr.py(后缀修改注意事项同二、)。启动cmd命令窗口在窗口输入如图4-1所示的操作即可实现pr.py程序的运行。图4-1 cmd.exe运行python从广义上讲python解释器也是一个编译器。CMD是调用python的解释器来运行python程序代码当然在调用运行前需要先安装python并在windows中配置好python环境变量可以手动配置环境变量(设置方法参见https://blog.csdn.net/thefg/article/details/131916203中的四、)但在安装python时会提示勾选在windows系统中生成python环境变量。同理其他编程语言也可以类似在windows的cmd.exe命令行中运行。另外在windows的powershell.exe命令行中也可以运行编译器但生成的.exe文件一般需要增加.\才能运行powershell.exe命令行的功能比cmd.exe命令行更强大下图4-2用powershell.exe运行编程语言。图4-2 PowerShell.exe运行编程语言希望这篇文章对你有帮助https://shop197191312.taobao.com/谢谢