如果你的CB停留在前面Windows版Hello World工程中,请确保退出Hello World的窗口。然后选主菜单:File | Close All,关闭Windows版Hello World工程。
依次点击菜单:File | New,出现一个 New Items对话框,等待我们选择要新建什么。 默认的选中项是上页图中New页内的第一个:Application。如果选它,确认后的工程就是上一节我们创建的空的工程。但现在我们要建立一个DOS风格的程序。
选上图中加有红圈的 Console Wizard (控制台程序向导)。确认后出现向导的第一步:
请您确认将对话框中的相关选项设置成和上图一致,然后点OK按钮。没有表单,只有代码编辑框窗口(第一节的“2”号窗口)内中代码为: //------------------------------------------------------------- #pragma hdrstop
//------------------------------------------------------------- #pragma argsused
int main(int argc, char* argv[]) {
return 0; }
//-------------------------------------------------------------
这是C语言的主函数,或者称为入口函数。程序从这个地方作为起点开始执行,以
13
后会有更多讲解。同样地,这也是一个程序框架,一个空白的DOS程序框架。让我们选菜单中Run | Run或直接按F9键,看看结果和前面的Windows空白程序会有什么不同?
眼前出现一个黑色的窗口,然后就一晃而过,回到了C++Builder的界面。 黑色的窗口,在不同版本的Windows中有不同的叫法和不同的实现机制,但都是Windows操作系统兼容DOS的方式。这种DOS方式在术语上称为“控制台/ console”。如果你不明白什么是DOS,请通过其它途径另外学习。
2、用控制台输出“Hello world”:
我们需要加入三行代码才能实现DOS版的Hello World;以下黑体部分为你需要在代码中加入的内容:
(约定:在代码中使用黑体,用来表示您应该输入的部分) //------------------------------------------------------------- #include
//------------------------------------------------------------- #pragma argsused
int main(int argc, char* argv[]) {
printf(\getchar(); return 0;
}
//-------------------------------------------------------------
这是一个很短的程序,我们稍微做点解说:
如果作一个大的程序,代码一多自已都会看晕,所以就需要在代码中加一些注释,用以解说某行或某段代码的用途,或者用以让代码显得清晰。C++中,常用双斜杠 “//”开始,一直到该行结束的内容来代表注释。上面的代码中,有三行: //-------------------------------------------------------------
这正是用来从视觉上分隔代码的注释。注释对程序的运行没有任何影响,其作用只用来给人看的。当编译器编译进,它会过滤掉所的有注释内容。
#pragma hdrstop和#pragma argsused两行为编译预处理命令,当编译器在编译本段代码,预处理命令会影响编译的某些行为。
#include
头文件起什么作用呢?
C++Builder为我们提供了函数库(RTL /runtime library)和类库(VCL);而Windows
14
操作系统(Windows用C写成)则向我们提供了API函数库。“库”是“储存”大量实用的解决各种问题,实现各种功能的“工具”的地方,它们都通过头文件列出清单。
当我们写上#include
printft和getchar正是两个在stdio.h中列出来的函数。如果没有#include
Print是打印之意,而f则为format,二者结合意为“有格式地打印”。我们的Hello World不需要任何格式。至于getchar从字面上理解是“得到字符”,事实上就是程序会在此处停下来,等待用户输入字符,直到输入一个回车符,程序继续执行。在我们的这个程序里,继续执行的结果是碰上这一行: return 0;
return的意思是返回,当主函数main返回时,整个程序就结束了。所以,使用这个getchar()的目的很明显:让程序在结束之前可以等我们一下(因为我们需要看一眼输出的“Hello World”)。
Printf的作用是输出(output)内容,而getchar()则是等待你输入,从这一点看,我们也可以理解前面include为什么是 stdio.h了。std是英文标准的前三个字符,而I和O分别是input和output的首字母。
说了很长,但程序运行结果却很简单,这是按F9后的运行结果:
按回车结束程序。结束后,别忘了保存我们的第二个程序。 四、简单程序调试:
1、编译期错误与运行期错误:
如果我在上面的程序输出时,打出的字幕不是“Hello,world”,而是“Hello,word”。你一定会说“哎,哥们,程序错了!”。于是,我就要去代码中查找有关输出的那一句,一看,哟,真少写了一个‘l’。将这一错吴改正,重新运行,检查结果。
这就是一个调试过程,发现错误;查找出错原因;改正;再运行。当然,由于很多时候我们也不是非要等到发现错误了才去检查,有时我们会主动一步步去事先主动检查是否有错。必竟BUG总是常见的。程序错误(BUG)表现上各式各样,但若是从其“发作”的时间上分,则可分为“编译期错误”和“运行期错误”。如果上面说的错误属于后者,因为它对编译过程并不产生什么阻碍,编译可以通过,错误将在运行中表现出来
15
(按时间分还有一种称为“链接期错误”,这里不说)。
在上一节的代码中,我们来故意制造一个编译期的BUG,我们故意将最后一句代码:return 0; 行末的分号“;”删除,代码如下: int main(int argc, char* argv[]) {
printf(\getchar();
return 0 //根据约定,我们用粗斜体表示修改过的代码 }
写好代码后按F9,程序并没有跑起来。但在代码编器窗口下面,出现一消息框(如果你没有发现,请在代码窗口中点鼠标右键,将出现右键菜单,选:Message View项)。
编译过程是一个相当复杂的过程,在编译之前,代码会被做很多格式上的转换,人写代码出错的原因也五花八门,所以想让编译器判断到底你犯了什么错吴事实上是很难的,但CB的编译出错消息仍竭尽全力让我们找到出错原因:
[C++ Error]:错误类型;这是在告诉我们,这是一个C++语言语法方面的错误。编译器说对了,因为我们少写一个分号,确实是犯了C++语法错误。
Unit.cpp(13):错误位置;说的是在Unit.cpp这个文件内的第13行,出错的文件显然是说对了,但行数却稍有偏差,少了分号的那行其实是第12行,从状态栏可以看到当前光标位置的行列数。
E2378:错误编号,CB对各错误消息进行了编号。
Return statement missing;错误消息;在这里这个消息完全正确,“return”语句丢了分号。
在使用中,并不是每回都能幸运得到这样准确的错误报告和消息。比如,同样是去掉分号,但这回是把return 0一句的分号补上,转而去掉printf(“Hello world!”)这一行的分号,编译出错消息是这样:
16
相关推荐: