首页 > 代码库 > 葛军视频教程《windows程序设计》配套文章_1.1 从最经典的“hello world”C语言程序说起

葛军视频教程《windows程序设计》配套文章_1.1 从最经典的“hello world”C语言程序说起

第一章 编写第一个Windows应用程序
 
1.1 从最经典的“hello world”C语言程序说起
本文视频教程地址:
优酷网(超清):http://v.youku.com/v_show/id_XNjkwMjgwNzE2.html 土豆网(超清、原画):http://www.tudou.com/programs/view/NV1scXZCbJ8/
 
       备受全世界程序员青睐的一本书是《The C Programming Language》(中文名《C语言程序设计》),该书由Brian W.Kernighan和Dennis M.Ritchie(简称K&R)编著。在这本举世闻名的伟大程序设计著作中,第一章开头部分的“hello world”程序堪称绝世经典:
main()
{
 printf("hello,world\n");
}

       千千万万的程序设计人员都是从这个简短而又经典的C语言程序开始。该程序非常的短,但却展示了一个C语言程序的几大要素和特点:

       (1)必须要有的入口函数—— main函数。每个C语言程序,都是从main函数这个起点开始执行。

       (2)函数的执行体——由一对花括号{}括起来的部分。该程序中只有一句:

printf("hello,world\n");

       (3)函数的调用——C语言程序,通常会在main函数中调用其它函数来完成更多的某些工作。C语言函数的调用格式为: 函数名+(参数表)        printf函数就是C语言内置的一个函数,用于打印(输出)文本字符串。英文状态输入下的括号()中即为该函数的参数,用于说明要打印(输出)的文本字符串内容。用双引号括起来的字符序列称为字符串或字符串常量。"hello,world\n"就是一个字符串。其中的字符序列\n表示换行符,在打印中遇到它时,输出打印将换行,从下一行的左端行首开始。在printf函数的参数中,只能使用\n表示换行符,而不能在语句中回车换行代替\n,例如:

printf("hello,world
");

       就是错误的格式。

       (4)每一条C语句由分号“;”结尾。
        要在Windows平台上看到该程序的运行结果,那就需要将这个程序进行编译。采用任何版本的Microsoft Visual Studio组合套装(简称VS)中的Visual C++是个不错的选择。以Visual Studio 2013为例,可以采用下列步骤:
        打开Visual Studio 2013后,执行“文件”——“新建”——“项目”菜单,在弹出的“新建项目”对话框中,在左侧“已安装”的“模板”列表中,确保选中“Visual C++”,然后在中间的列表中,选择“Win32 控制台应用程序”。在“名称”一栏的文本框中根据自己的需要输入项目的名称,这里输入HelloWorld,在“位置”一栏的文本框中输入或单击该文本框右侧的“浏览”按钮,来确定项目保存的路径位置。“解决方案”一栏可视情更改或保持默认,这里保持默认。单击“确定”。

        这样,我们就创建了一个新的项目,但现在该项目是空的,还需要创建一个源文件,用来输入C语言程序。在“解决方案资源管理器”面板窗口中,选中“源文件”,右击鼠标,在弹出的菜单中,选择“添加”——“新建项”,在弹出的“添加新项”对话框中,确保选中“C++文件”,在“名称”一栏的文本框中任意输入一个名称,这里输入hello.c 。注意:由于我们要编译C语言代码,所以这里必须加上扩展名.c(扩展名.c不区分大小写)。如果不加扩展名,那么VS将会创建扩展名为.cpp的C++源文件,并采用C++方式编译源代码。        单击“添加”按钮,就会添加将新建的hello.c文件添加到项目、并在IDE集成开发环境中打开。接着,就可以输入代码:

main()
{
 printf("hello,world\n");
}

       代码输入完成后,最好养成良好的习惯,及时进行保存。为了生成可执行文件,可以在“生成”菜单中执行“生成解决方案”。在生成的过程中,我们需要留意IDE下方的“输出”面板窗口,从这里可以看到生成成功的信息,以及生成的可执行文件所在位置,而且可以看到有一个 warning C4013: “printf”未定义;假设外部返回 int的警告信息。这里的警告信息不足以影响可执行文件的生成和执行,所以我们暂不理会,在稍后我们会对其进行分析并解决。

       为了生成可执行文件,可在这里执行“生成解决方案”。在生成的过程中,我们需要留意IDE下方的“输出”面板窗口,在该窗口可以看到是否生成成功,以及生成的可执行文件所在位置,这里有一个警告。但该警告不足以影响本程序可执行文件的生成和执行,暂不理会,在稍后会对其进行分析并解决。

       根据“输出”面板窗口的提示,我们可以找到生成的可执行文件hello.exe,运行它,一个黑色的窗口一闪即逝。这是一个控制台程序,只用于打印输出一行文本,文本输出后,由于没有其它操作的执行,所以程序就会自动退出。要想让这个程序运行时,能够“停”下来,让我们好好看下执行结果,我们可以从控制台程序cmd.exe中运行它。

       运行cmd,输入命令转到hello.exe所在目录,然后运行。就可以看到执行结果了。对于这个cmd,很多人都以为它是一个DOS,其实不然,在后面章节就会对此进行详细说明。

       在控制台窗口运行的hello.exe,之所以可以让运行结果停留,是因为cmd窗口只是为运行它而提供的工作环境,程序执行完就正常结束,就会把控制权交给cmd。cmd会忠实的等着用户输入下一条命令,而不会“擦”去上次运行的结果。

       当然,为了方便,我们在程序开发中,通常在IDE开发环境中直接运行编写的程序,对于控制台应用程序,最快捷的方法就是:按Ctrl+F5来观看程序的执行结果。

       接着,我们需要对该程序中出现的警告信息进行分析。printf是一个C语言自带的函数,它存放于C语言的标准函数库中,其声明部分是在C语言的stdio.h头文件中。该文件名也有象征意义:std——代表英文的standard(标准),io——代表input(输入)、output(输出),合起来就是“标准输入输出”的意思。也就是说,C语言所以与标准输入输出流有关的函数都在其中定义。众所周知,C语言包括大部分计算机高级编程语言,调用函数时都必须先声明、后使用。但也许由于许多与printf类似的、在stdio.h中声明的C语言函数,使用太过频繁,所以很多C语言编译器(但不是所有的)开启了一点方便大门,使得不用声明就可以stdio.h中定义的函数。编译时,遇到这类函数,编译器就自动到stdio.h中寻找相应的函数声明。

       虽然不声明也可使用,但并不推荐这样做。为了确保程序的完整性、平台兼容性和对C语言标准的支持上,还是强烈建议在源程序中包含函数调用时所需要用到的头文件。 由于stdio.h是C语言系统文件,所以可以在包含语句中,将stdio.h放在尖括号<>中:

#include <stdio.h>

       再次编译程序,发现警告已不复存在。

       虽然以上程序,仍然那么短,并可以无警告、无错误的顺利通过编译,并可以很好的执行,但现在的程序员更愿意清楚的说明main函数的返回值,因为在ANSI C90标准下,规定该函数必须有一个返回值。程序就可以进一步写成这样:

#include <stdio.h>

int main()
{
 printf("hello,world\n");
 return 0;
}

       main函数标准的返回值为int(整型),程序返回一个0值与之呼应。返回0,是返回给操作系统,表示程序已经执行完毕。return语句不仅用于返回一个值,还在于结束函数。

       编译无问题。

       当然,以上的main函数没有参数,我们还可以给它加上正确的参数,让它更长一点:

#include <stdio.h>

int main(int argc, char * argv[])
{
 printf("hello,world\n");
 return 0;
}

 

       这样我们都能得到同样正确的编译和运行结果。

 

本文视频教程地址:
优酷网(超清):http://v.youku.com/v_show/id_XNjkwMjgwNzE2.html 土豆网(超清、原画):http://www.tudou.com/programs/view/NV1scXZCbJ8/