1.命令行下写程序。

写程序一定要用IDE?
不,我还可以用记事本呢。
呵呵,写程序一定要用记事本??

————————————————

命令行下输入copy con test.txt后回车可在相应目录下创建test.txt文件。
然后你就可以在终端上写了。。。
写完后按下ctrl + z键,回车,输入结束,文件保存。
当然,你也可以copy con test.cpp写程序。

————————————————

2.

CodeBlocks之命令行下完成编译
把xx.cpp文件copy到CodeBlocks文件夹下的MinGW/bin子文件夹下,该子文件下有g++.exe,gcc.exe等可执行程序。在命令行窗口下,g++ xx.cpp就可以了。话说为什么生成的是a.exe呢......因为默认生成的则是a.exe.....可以g++ xx.cpp -o xx则生成xx.exe。更多细节可参考刘汝佳紫书附录A.3 编译器和调试器。

更简单的方法是设置环境变量。在命令提示框(cmd)中输入 path=%path%;C:\MinGW\bin 即可。

命令: g++ Test.cpp
功能:生成默认为a.exe的文件,这个过程包含了编译和链接。
再说下-o命令,-o命令表示输出的意思,gcc/g++命令是非常灵活的,你不指定输出的文件名的时候默认生成的是.exe文件。
你要输出Test.exe的话可以用:g++ -o Test.exe Test.cpp。-o命令是输出的意思,这样就输出了Test.exe。

gcc/g++在执行编译工作的时候,总共需要以下几步:

1.预处理,生成.i的文件[预处理器cpp]

命令:g++ -E Test.cpp > Test.i

功能:输出预处理后的文件,linux下以.i为后缀名。只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里 。这一步主要做了这些事情:宏的替换,还有注释的消除,还有找到相关的库文件。用编辑器打开Test.i会发现有很多很多代码,你只需要看最后部分就会发现,预处理做了宏的替换,还有注释的消除,可以理解为无关代码的清除。下面是Test.i文件的最后部分,可以看见宏的替换和注释的消除。

2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]

命令:g++ -S Test.cpp
功能:会生成Test.s文件,.s文件表示是汇编文件,用编辑器打开就都是汇编指令。

3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]

命令:g++ -c Test.cpp 
功能:.o是GCC生成的目标文件,除非你是做编译器和连接器调试开发的,否则打开这种.o没有任何意义。二进制机器码一般人也读不了。

4.连接目标代码,生成可执行程序[链接器ld]

命令:g++ Test.o -L F:\vs2008\VC\include\iostream
功能:将.o文件与所需的库文件链接整合形成.exe文件,这就是可执行文件。-L 表示链接,这里我后面写的是绝对路径,相对各人电脑不同。

VS之命令行下完成编译
如果你安装有VS,可以启动vs开发人员命令提示,跳到源文件所在目录后,输入cl xx.c即可完成对其的编译。

在cmd窗口中执行程序,不用在末尾附加诸如system("Pause")或getchar()之类的东西,窗口不会一闪即逝,那是在IDE下调试程序时用的(其实绝大多数时候都不需要,因为一般程序总有一个循环等待用户交互再结束的)。

————————————————————————————————————————————————————————

其实所谓的命令行环境,不过是普通的cmd窗口,它只是设置了搜索环境(environment),

 该环境不单是编译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就是工作室的意思,所谓工作室,是包含工作所需的一切设施的。当然,有人只想要一张桌面,不要书柜,那确实可以不用工作室,摆地摊就可以了。

windos命令行下的程序编写的更多相关文章

  1. 在linux命令行下执行php 程序

    如何在linux命令行下,执行php程序. 例子 打印当前时间 php -r "echo time()" 随机输出一个数字 php -r "echo rand(1,20) ...

  2. Python安装后在CMD命令行下出现“应用程序无法启动.............”问题

    问题存在之一:系统是刚刚重做的精简版服务器系统(阉割版) AN就是在阿里云上刚开的Windows Server 2008 系统上碰到的  吓尿了都 症状:            正常安装python环 ...

  3. 【Python】iichats —— 命令行下的局域网聊天程序

    转载请声明出处:http://www.cnblogs.com/kevince/p/3941728.html   ——By Kevince ii系列工具第三弹,命令行下的局域网聊天程序 原理: 程序启动 ...

  4. Linux命令行下如何终止当前程序

    Linux命令行下如何终止当前程序 快捷键: Ctrl+c 在命令行下起着终止当前执行程序的作用, Ctrl+d 相当于exit命令,退出当前shell Ctrl+s 挂起当前shell(保护作用很明 ...

  5. 命令行下的C++程序转换成VC的MFC程序需要注意的问题

    在将命令行下的C++程序转换成MFC窗口程序时一般会提示下面这种错误: fatal error C1010: unexpected end of file while looking for prec ...

  6. MySQL命令行下执行.sql脚本详解

    本文主要介绍一个在MySQL命令行下执行脚本文件的例子,通过这个例子让我们来了解一下在命令行下MySQL是怎样执行脚本的吧.现在我们开始介绍这一过程. 1.首先编写sql脚本,保存为的:book.sq ...

  7. 转:开启命令行下的社交-webqq脚本

    最近一直在命令行下工作,除了 Google Chrome,几乎很少接触 GUI 相关的软件.前段时间把手机上的 QQ 给卸载了,希望可以把时间凝聚在更加有价值的位置,今天突然又想起了这个软件,突发奇想 ...

  8. Linux系统——28个命令行下的工具

    Unix/Linux下的28个命令行下的工具 下面是Kristóf Kovács收集的28个Unix/Linux下的28个命令行下的工具(原文链接),有一些是大家熟悉的,有一些是非常有用的,有一些是不 ...

  9. Linux 命令行下搜索工具大盘点,效率提高不止一倍!

    在 Linux 命令行下进行文本关键字的搜索,大家肯定第一时间会想到 grep 命令.grep 命令确实十分强大,但如果需要用到它更加灵活的功能时,可能命令就会显得十分复杂. 于是,为了简化 grep ...

随机推荐

  1. phpize 动态添加 PHP 扩展的错误及解决方案

    使用phpize 动态添加 PHP 扩展是开发中经常需要做的事情,但是在 macOS 中,首次使用该功能必然会碰到一些错误,本文列出了这些错误的解决方法. 问题一: 执行 phpize 报错如下: $ ...

  2. ReactDom.render和React.render的区别

    这个是react最新版api,也就是0.14版本做出的改变.主要是为了使React能在更多的不同环境下更快.更容易构建.于是把react分成了react和react-dom两个部分.这样就为web版的 ...

  3. ACM题目————Subsequence

    Description A sequence of N positive integers (10 < N < 100 000), each of them less than or eq ...

  4. angular 控制器之间的通信

    1, 利用作用域的继承方式 由于作用域的继承是基于js的原型继承方式,所以这里分为两种情况,当作用域上面的值为基本类型的时候,修改父作用域上面的值会 影响到子作用域,反之,修改子作用域只会影响子作用域 ...

  5. Stars(树状数组或线段树)

    Stars Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 37323 Accepted: 16278 Description A ...

  6. vc6

    适合win7使用的: http://pan.baidu.com/s/1nt7SG57

  7. Unity-Animator深入系列---FAQ

    回到 Animator深入系列总目录 Q: 如果想做角色负伤的一套动画,但是又和原有状态机不冲突,只是想换动画剪辑,应该怎么办? A: 新建一个层,设置为同步模式.这时候你不能在同步层添加状态,但你可 ...

  8. recv send 阻塞和非阻塞

    http://blog.csdn.net/xiaofei0859/article/details/6037814 int send( SOCKET s, const char FAR *buf, in ...

  9. HDU How many integers can you find 容斥

    How many integers can you find Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  10. 2016年11月19日 星期六 --出埃及记 Exodus 20:10

    2016年11月19日 星期六 --出埃及记 Exodus 20:10 but the seventh day is a Sabbath to the LORD your God. On it you ...