1.命令行下写程序。
写程序一定要用IDE?
不,我还可以用记事本呢。
呵呵,写程序一定要用记事本??
————————————————
命令行下输入copy con test.txt后回车可在相应目录下创建test.txt文件。
然后你就可以在终端上写了。。。
写完后按下ctrl + z键,回车,输入结束,文件保存。
当然,你也可以copy con test.cpp写程序。
————————————————
2.
VS之命令行下完成编译
如果你安装有VS,可以启动vs开发人员命令提示,跳到源文件所在目录后,输入cl xx.c即可完成对其的编译。
在cmd窗口中执行程序,不用在末尾附加诸如system("Pause")或getchar()之类的东西,窗口不会一闪即逝,那是在IDE下调试程序时用的(其实绝大多数时候都不需要,因为一般程序总有一个循环等待用户交互再结束的)。
————————————————————————————————————————————————————————
其实所谓的命令行环境,不过是普通的cmd窗口,它只是设置了如下所示的搜索环境(environment):
ALLUSERSPROFILE=C:\ProgramData APPDATA=C:\Users\TonyD_000\AppData\Roaming CommonProgramFiles=C:\Program Files\Common Files CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files CommonProgramW6432=C:\Program Files\Common Files COMPUTERNAME=HASEE ComSpec=C:\WINDOWS\system32\cmd.exe DevEnvDir=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ ExtensionSdkDir=C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0\ExtensionSDKs FP_NO_HOST_CHECK=NO Framework35Version=v3.5 FrameworkDir=C:\WINDOWS\Microsoft.NET\Framework\ FrameworkDIR32=C:\WINDOWS\Microsoft.NET\Framework\ FrameworkVersion=v4.0.30319 FrameworkVersion32=v4.0.30319 FSHARPINSTALLDIR=C:\Program Files (x86)\Microsoft SDKs\F#\3.0\Framework\v4.0\ HOMEDRIVE=C: HOMEPATH=\Users\TonyD_000 INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\ATLMFC\INCLUDE;C:\Program Files (x86)\Windows Kits\8.0\include\shared;C:\Program Files (x86)\Windows Kits\8.0\include\um;C:\Program Files (x86)\Windows Kits\8.0\include\winrt; LIB=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\LIB;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\ATLMFC\LIB;C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86; LIBPATH=C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319;C:\WINDOWS\Microsoft.NET\Framework\v3.5;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\LIB;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\ATLMFC\LIB;C:\Program Files (x86)\Windows Kits\8.0\References\CommonConfiguration\Neutral;C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0\ExtensionSDKs\Microsoft.VCLibs\11.0\References\CommonConfiguration\neutral; LOCALAPPDATA=C:\Users\TonyD_000\AppData\Local LOGONSERVER=\\MicrosoftAccount NUMBER_OF_PROCESSORS=4 OS=Windows_NT Path=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files (x86)\Microsoft SDKs\F#\3.0\Framework\v4.0\;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VSTSDB\Deploy;C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\BIN;C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools;C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319;C:\WINDOWS\Microsoft.NET\Framework\v3.5;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\VCPackages;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\Microsoft Visual Studio 11.0\Team Tools\Performance Tools;C:\Program Files (x86)\Windows Kits\8.0\bin\x86;C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft\Web Platform Installer\;C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\;C:\Program Files (x86)\Windows Kits\8.0\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\ PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC PROCESSOR_ARCHITECTURE=AMD64 PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 42 Stepping 7, GenuineIntel PROCESSOR_LEVEL=6 PROCESSOR_REVISION=2a07 ProgramData=C:\ProgramData ProgramFiles=C:\Program Files ProgramFiles(x86)=C:\Program Files (x86) ProgramW6432=C:\Program Files PROMPT=$P$G PSModulePath=C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\ PUBLIC=C:\Users\Public SESSIONNAME=Console SystemDrive=C: SystemRoot=C:\WINDOWS TEMP=C:\Users\TONYD_~1\AppData\Local\Temp TMP=C:\Users\TONYD_~1\AppData\Local\Temp USERDOMAIN=HASEE USERDOMAIN_ROAMINGPROFILE=HASEE USERNAME=TonyD_000 USERPROFILE=C:\Users\TonyD_000 VCINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\ VS110COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\ VSINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio 11.0\ windir=C:\WINDOWS WindowsSdkDir=C:\Program Files (x86)\Windows Kits\8.0\ WindowsSdkDir_35=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ WindowsSdkDir_old=C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\
这个环境不单是编译C/C++程序的,也可以编译C#和VB.NET、ASP.NET程序的。
请留意上图,在键入cl启动编译程序编译时,又自动启动了Linker链接程序,即C/C++程序的编译是要经过两个阶段的,第一是编译,把文本型的源代码编译为目标代码.obj文件,第二调用链接器把所有.obj和.lib拼合为可执行文件.exe。当我们编写多模块文件程序时,将有多个.cpp源代码,编译器是逐一把这些.cpp编译为对应的.obj,然后再用Linker把这些.obj和需要用到的.lib库拼合。所以,“编译器”实际上仅是编译,缺了链接,程序是无法执行的(通常报告某某库函数没找到、某某变量却定义之类,就是链接阶段的错误)。
程序编译并链接成功后,是脱离IDE和开发环境独立运行的,不需再附带vs,一般把编译得到的.exe文件复制出去即可(前提是运行的机器有对应版本的C/C++运行时库DLL)。
常见有人说vs只是IDE什么之类,其实是他们不知道本来有命令行开发环境可用,须知vc是从DOS时代的msc一直发展下来的延续版本的编译器,cl.exe本身就是在命令行使用的,cl Ver6.0、Ver7.0就是和TC/BC齐名于一时的编译器,vs2012是cl Ver17.0,而TC/BC则已经停止发展了,只是一般人少用而已。TC/BC声名大噪,是因为它抛出了IDE,而MSC的编译质量虽然比TC/BC优越但没有IDE,所以那个时候很多人都选择了TC/BC,这也是现在学校仍然推荐和教学TC/BC的原因,因为那些老古董教授就是这样过来的。MSC在Windows大发之后才搞的IDE,那就是原始的VS,最著名的是Ver6.0套装,才彻底击败TC/BC的IDE。
关于HelloWorld程序一点有趣的比较:用printf()写的,其.exe尺寸是56K,改用如下的putchar()版本,则是53K,源代码长了,但机器码却短了,这个尺寸的差异3K,就是printf()函数的规模,编译出来的机器码都占3K,可想而知其源代码有多庞大!
所有IDE,都是调用命令行下的编译程序,使用msc内核的是cl,使用gcc内核的是gcc。IDE只是把编译程序的输出信息输出到IDE窗口中,并没有改变编译的过程。不要把IDE和编译环境混为一谈,Code::Blocks不是编译器,而是一个内嵌某种编译器的IDE,它只是一个综合性的文字编辑器而已。同样,vs的IDE也是一个综合编辑器。
vs是一个“工作室”,Studio就是工作室的意思,所谓工作室,是包含工作所需的一切设施的。当然,有人只想要一张桌面,不要书柜,那确实可以不用工作室,摆地摊就可以了。