Hello world与编程基础
所以,学好C语言的基础语法,是学习和运用C语言的第一步。
2.1 VC编写,编译,运行,调试hello world
学习任何程序设计语言,一般都是先从”Hello world”程序开始,通过这样一个简单的程序,大家就可以学会在不同的平台如何搭建起一个开发环境来编写,编译,运行以及调试一个该语言书写的程序。”Hello world”是“世界您好”的意思。学习C语言也可以从“Hello world”开始。该程序的主要功能就是运行后,在屏幕上打印出一个“Hello world”语句。
下面也直截了当,首先抛开复杂的理论,演示如何从头开始来编写和运行C语言中的”Hello world”这个程序,让大家有一个对用C语言写程序的初步印象。在一个文本编辑器里,按照下面的格式敲入下面的C语言代码,也就是Hello world的源代码。
/* this is the first C language */
#include <stdio.h>
int main(void)
{
//print “hello world” as follows
printf(“hello world\n”);
return 0;
}
//hello.c hello.cpp hello.h
这就是C语言的第一个程序:Hello world的源代码。这是一个很简单的C语言程序,只打印一条“Hello world”语句。现在来逐一分析一下这个简单的C语言程序的结构。
首先,第一行,是程序的注释。注释是对代码的一些解释或者说明。注释是不会被编译进程序里执行的。所以,注释是一种辅助的信息,即使从程序源码里去掉,也不会影响程序的执行。当然这不是说注释不重要或者可有可无。良好的注释,有助于代码的维护和理解。
C语言的注释风格有两种。第一种为/*some comments*/,块注释。另一种为//开头的注释,比如://some comments。第一种注释可以注释一行或者若干块。而第二种,只注释一行。
第二行是一个#include <stdio.h>。它的作用是包含了一个C语言库中的一个头文件:stdio.h。这样,在下面的代码中,就可以引用在这个头文件中定义的函数:printf()。
第三行到第八行,是一个函数,main函数。其中第三行的int main(void)中,第一个int是main函数运行结束之后的返回值部分,int表示main函数将会返回一个整数类型的值(比如返回0或者1表示成功,返回-1表示失败等)。Main是函数的名称,括号中间的void表示main函数不接受任何参数。
Main函数是程序执行的主入口。也就是程序是从main函数开始执行的。一个C语言程序,都必须有一个main函数。
第四行与第八行是一对花括号。一个函数的主体就被包含在一对花括号之间。至于函数的更多知识,会在接下来的章节做更多的介绍。
第五行是一个用//注释的语句,告诉大家下面的代码要打印一个”hello world”。
第六行就是该程序最核心的语句,执行该语句之后,程序就会打印出一个”hello world”作为输出。此语句调用了一个在stdio.h头文件中定义的printf函数,printf函数会将传递给该函数的”hello world”输入参数打印。
第七行是一个返回语句。main函数执行完之后,如果需要返回给调用者一个值,就需要调用return语句来返回对应的值。由于该main函数需要返回一个int值,所以就直接调用了return 0;语句返回0作为返回值。
假如需要main函数返回一个值,可以修改代码如下:
/* this is the first C language */
#include <stdio.h>
int main(void)
{
//print “hello world” as follows
printf(“hello world\n”);
return 0;
}
//hello.c hello.cpp hello.h
这样,main函数的返回值为int类型,并在函数的最后调用了return 0来负责返回了一个整型的0值给调用者(执行程序的一方)。
C语言代码的每一句之后,都以分号”;”结束。如果不跟分号,程序将会报错而无法编译和运行。
分析完了C语言代码之后,接下来就得想办法把这段代码编译,然后运行,才能最终看到程序运行的效果。
C语言一开始就具有跨平台的特性。因此,C语言程序既可以在Windows平台编译与运行,也可以在Linux等系统上编译运行。本书将介绍这两种平台下C程序的编译与运行。
首先以Hello world为例子,介绍一下如何在Windows平台里编译和执行C语言程序。要在Windows平台开发C程序,需要先安装一个IDE工具。IDE工具集成了代码编辑,编译,连接,执行等功能。
目前Windows上最主流的IDE环境是MS推出的VC系列,比如VC 6.0,Visual Studio 2008,Visual Studio 2010,Visual Studio 2012等。它们都可以用来作为学习C语言的IDE工具。
本书将介绍如何使用VC6.0和Visual Studio 2008开发C程序。
2.1.1 VC
6.0
VC6.0是MS(微软,Microsoft的简称)推出的最经典的一款IDE工具。它启动速度快,开发C程序很方便。所以,在这里,大家应该先安装好VC 6.0开发工具,搭建好C语言的开发环境。
然后启动VC6.0,如图1-1所示,选择File=>New…,然后弹出图1-2所示对话框。
图1-1 VC6.0启动界面
在图1-2所示对话框中,在左侧Projects栏里选择Win32 Console Application。在右边Project name里写上工程的名字,比如叫helloworld,名字可以按照自己的情况随便写,当然名字得有意义,最好能反映出你工程的目的或者用处。在Location下面,选择一个保存工程的文件夹,然后点击OK,然后会弹出对话框如图1-3所示。
图1-2 选择VC6.0 中创建的工程
在图1-3中,有4个单选按钮,供开发者选择不同的工程类型如下:
l An empty project:会创建一个空的工程,里面什么源文件也没有,可以把自己写好的源文件加入工程,然后编译。
l A simple application: 会创建一个源文件,并包含了一个main函数,但这个main 函数什么也不执行,就返回了。程序员可以直接在里面敲入代码逻辑,然后编译运行。
l A “Hello, World!” application:会创建一个源文件,并包含了一个main函数,这个main 函数还会调用printf()函数,打印出一个Hello, World!字符串。程序员可以直接在里面敲入代码逻辑,然后编译运行。
l An application that supports MFC: 创建一个支持MFC库的工程。
图1-3 选择工程类型
先选择An empty project,创建一个空的工程。
从菜单栏里的File=>New,弹出如下对话框,在左侧列表里面选择“C++ Source File”,在右边的File里填写要创建的源代码文件名,如:hello.cpp,然后点击OK。会生成如下的一个工程:
在hello.cpp里面写入hello world的代码,然后按下快接键F7编译构造可执行程序。成功之后,按ctrl+F5,执行。
就打印出了所希望见到的”hello world”字符串了。
如果选择A simple application,点击Finish之后,就生成了图1-4所示的工程。在helloworld.cpp中,有一个简单的main()函数,这个函数里什么都有没有执行,就直接调用return语句返回了。
图1-4 简单C语言工程
如果选择了A “Hello, World!” application,点击Finish之后,就生成了图1-7所示的工程。在helloworld.cpp中,就是上面提到的hello world程序代码。当然这里并没有上面的注释,你也可以根据自己的需要加上你的注释。
一般一个工程不会只有一个源文件,那么需要往工程里添加新的.c或者.cpp文件(C++对应的源文件,C语言是C++的一个子集,所以既可以用.c文件,也可以用.cpp文件来写C程序),应该怎么做呢?
在工程的名字上右键,选择Add Files to Project,即可添加新的文件。当然,目前Hello world文件并不需要添加任何新的文件。
现在以图1-5中的工程为例子,来演示如何编译和执行C语言程序。在工具栏上,一般默认有如下几个图标:
图1-5 编译功能按钮
从左到右,第一个图标(快接键是ctrl+F7),是编译(compile)。会将源文件编译成对应的.o文件。第二个图标(快接键是F7),是构造(build),直接将工程编译链接为可执行程序。第三个图标用来结束构造过程。第四个图标(快接键 ctrl+F5),是执行(execute),用来执行已经构造好的程序。如果没有事先构造程序,点下第四个图标,会先构造,然后再执行。
如果在VC6.0工具栏上没有这个图标,可以用鼠标在工具栏的空白处右键选择build,就可以让这些图标出现在工具栏上。
图1-6 显示编译系列按钮
图1-7 hello world工程
现在,先点击build按钮构造程序。如果顺利没有任何语法错误的话,会在IDE的下面提示:0 error(s), 0 warning(s),意味着程序构造成功了。
注意:错误(error)与警告(warning)是程序里的两种编译提示信息。一般来说,错误是必须要纠正的,否则无法链接。而警告是可以忽视的,但既然有警告,肯定是哪里出了问题了。所以,一般来说,也要重视任何警告信息,有的时候甚至直接设置成把警告当成错误对待。
然后点击execute按钮,执行程序。程序输出如图1-8所示,打印出了”Hello world” 字符串。
图1-8 Hello world打印输出
上面,用VC 6.0编译了一个Hello world 程序。VC6.0用来学习和编译C语言程序已经足够。但如果想开发更多的Windows平台程序,用VC6.0中的库程序可能有点老了,比如VC6.0工程对Unicode的设置支持就不是特别好。因此,也可以使用visual studio 2008来编写C程序。
2.1.2 VC
2008
如图1-9所示,启动VC 2008之后,通过File=>New=>Project,弹出如图1-10所示对话框。
图1-9 VC 2008开发C语言程序
在图1-10中,选择Win32=>Win32 Console Application,然后在下面的Name一项中填写要创建的工程名字,如”helloworld”,在Location一栏中填写要创建的工程的保存位置。其它按照默认选择即可,然后点击OK,弹出如图1-11对话框。
图1-10 VC 2008创建C工程
图1-11
在图1-11中,是对目前创建的工程的一个大概说明,其实也没什么信息。在这里,点击Finish可以直接创建一个工程。点击Next,进入下一步可以修改的配置页面,如图1-12所示。
图1-12 设置程序工程相关属性
在图1-12中,保持默认设置,即Console application,和Precompiled header。然后点击Finish。就生成了如图1-13所示的工程。
图1-15 VC2008生成的工程代码
在图1-15所示的代码中,程序的入口成了_tmain(),这个和VC6.0中的main函数类似,在前面加个t,是为了对unicode项目的设置兼容,但它们都是程序执行的入口,其中int argc是程序的参数个数,_TCHAR* argv[]是参数数组。这个在后面会详细介绍,现在可以忽略。
在代码中加入printf函数,打印一个”hello world”语句,如图1-16所示。
图1-16 VC 2008 中的Hello world
在代码写好之后,如图1-17所示,在左边的工程名字上右键,选择”Build”来编译和创建可执行程序。如果没有错误出现,就会提示程序构建成功。如下信息:
Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped
图1-17 构建程序
图1-18 执行程序
编译成功并构造好可执行程序之后,就可以执行该程序了。点击菜单栏的Debug=>Start without Debugging或者按下ctrl+F5的快接键,就可以执行该程序。如图1-19所示,打印出”hello world”字符串。
图1-19 打印Hello world
实际上,目前VC系列IDE工具一直在更新,比如除了VS 2008(Visual studio 2008)之外,还有VS 2010,VS2012, ...,VS2019,VS2021等等,虽然在更新的时候引入了很多的新的功能,但也比VC 6.0等工具变得更加臃肿,性能也下降了很多。