*********************************************************
*********************************************************
一个程序的构成
|
或许开始学习一门编程语言的最佳方法就是写一个程序。因此,这就是我们的第一个程序:
// my first program in C++
#include <iostream>
using namespace std;
int main ()
{
cout <<
"Hello World!"
;
return 0;
}
|
Hello World!
|
第一个窗格给出了我们第一程序的源代码。第二个窗格中的内容则是这个程序被编译执行后的结果。编辑和编译一个程序的方法和你所使用的编译器有关。取决在它的版本中是否有一个开发借口。如果你对如何编译一个
C++
控制台程序的话,你可以看编译器那一节或者去查你的编译器带的用户手册或帮助信息。
前面的程序是编程语言初学者第一次写的典型的程序,它的运行结果是在屏幕上打印句子
”Hello World!”
。它是用
C++
可以写的最简单的程序之一,但它已经包含了每一个
C++
程序所拥有的基础构成。我们将一行一行的来看我们刚刚写下的代码。
// my first program in C++
这是一条注释行。所有已两条斜线
(//)
开头的行都被认为是注释,它对程序的行为没有任何影响。编程人员可以用它们在代码中包含简短的解释或说明。在我们的程序中,这行是我们程序内容的一个简要描述。
#include <iostream>
以符号
(#)
开头的行预编译指器指令行。他们不是拥有表达式的普通代码行而是给编译预处理器的指令。在我们的程序中,指令
#include <iostream>
告诉预处理程序把iostream标准文件包含近来。在这个特殊的文件(iostream)中包含有C++基本标准输入输出库的声明,我们包含这个文件是因为它的功能将要在后面的程序中用到。
using namespace std;
C++
标准库中的所有元素都是在
std
名空间中被声明的。因此为了使用这些功能,我们用这种方式声明我们将使用这些实体。在使用标准库德
C++
程序里这一行是经常出现的,而且事实上它将出现在这个指南里包含的大部分源代码中。
int main ()
这一行是用来声明
main
函数的。
main
函数是所有
C++
程序的起始运行点,无论他在源文件中的任何位置。在它的前后有其他名字的其他函数声明是没有关系的——从这个函数的定义我们可以知道,它是每个
C++
程序中第一运行的函数。由于同样的原因,所有的
C++
程序都有一个
main
函数。
在
main
的后面跟着在一对小括号
( () )
中的代码
.
这是因为它是一个函数声明:在
C++
中,函数声明和其他类型声明在表达形式上的不同就是在其名字后面跟着的这对小括号。在这对小括号中可以有选择的包含一个参数列表。
在这对小括号的后面的花括号
( {} )
中包含的是
main
函数的函数体。在这对花括号中包含的就是这个函数在运行时要做的事情。
cout << "Hello World";
这一行是一条
C++
语句。一条语句是一个简单或者复合的可以产生一些作用的表达式。事实上,我们第一程序中的这条语句仅仅产生了一个可视的影响。
cout
表示C++中的标准输出流,整条语句的意思是向标准输出流(通常是显示器)中插入一串字符(在这个例子中是Hello World!这个字符序列)。
cout
是在
std
名空间里的
iostream
标准文件中定义的,这就是为什么在我们先前的代码中需要包含那个特殊文件并且声明我们将要使用这个特殊名空间的原因。
请注意这条语句是一个一个分号
( ; )
结束的。这个符号用来标记语句结束的,事实上它必须出现在
C++
程序里每一个表达式语句的结尾
(
在一些语句的后面忘记分号是最普遍的语法错误之一
)
。
return 0;
return
语句表示
main
函数将要结束了。
return
可能需要跟随一个返回代码
(
在我们的例子里跟随的是返回代码
0 )
。
main
函数的返回代码
0
通常被理解为程序在运行期间没有任何错误并按照预先设计的那样工作。这是结束一个
C++
程序的最经常用的方法。
你或许已经注意到了并不是这个程序里面的每一行在代码运行的时候都执行了操作。有只含有注释的行
(
以
//
开头的行
)
;有预编译命令的行
(
以
#
开头的行
)
;有开始定义一个函数的行
(
在我们的例子里是
main
函数
)
;最后还有被
main
函数的一对花括号限定的区域所包含的语句
(
像往
cout
中插入信息
)
的行。
为了便于阅读,程序被组织在不同的行里面,但是在
C++
中对于如何把命令组织不同的行里没有十分严格的规定。例如:
我们可以把:
int main ()
{
cout <<
" Hello World "
;
return 0;
}
|
写成:
int main () { cout <<
"Hello World"
; return 0; }
|
所有的代码都在同一行里,而且它和上面的代码的含义相同。
在
C++
中,语句间的分割是靠在每条语句后面的终止符分号
( ; )
来完成的,因此分割在不同行里并不影响代码的目的。我们可以在一行代码里写很多条语句,也可以让一条语句有很多代码行。分割代码的到不同的行里的意义仅仅是使它对于可能读它的人来说更易读更明晰。
让我们为我们的第一程序加入一行新的命令:
// my second program in C++
#include <iostream>
using namespace std;
int main ()
{
cout <<
"Hello World! "
;
cout <<
"I'm a C++ program"
;
return 0;
}
|
Hello World! I'm a C++ program
|
这一次,我们在两条语句中把两个字符串插入到了
cout
中。又一次,吧代码组织在不同的行里仅仅是令程序更易读,因此
main
也可以这样定义:
int main () { cout <<
" Hello World! "
; cout <<
" I'm a C++ program "
; return 0; }
|
如果你认为把代码分成更多的行更舒服的话,你也可以自由的那样去做:
int main ()
{
cout <<
"Hello World!"
;
cout
<<
"I'm a C++ program"
;
return 0;
}
|
结果和上面的例子是完全一样的
.
预编译命令
(
已
#
开头
)
不符合这些通常的规则,因为它们不是语句。它们是给预处理器读的并且被预编译器丢弃,它们本身不会产生任何代码。预编译命令必须被写在它们自己的行里并且不用以分号
( ; )
结尾。
注释
注释是被编译器丢弃的那部分源代码。它们什么也不做。它们的目的只是为了让程序员在源代码中嵌入写注解或描述。
C++
支持两种插入注释的方法:
// line comment
/* block comment */
|
第一个是行注释,抛弃从一对斜线
( // )
开始到其所在行结束的所用东西。第二个是块注释,舍弃从
/*
开始到第一次出现
*/
之间的所有东西,通常它包含很多行。
我们将为我们的第二个程序加入注释:
/* my second program in C++
with more comments */
#include <iostream>
using namespace std;
int main ()
{
cout <<
"Hello World! "
;
// prints Hello World!
cout <<
"I'm a C++ program"
;
// prints I'm a C++ program
return 0;
}
|
Hello World! I'm a C++ program
|
如果你在你的程序源代码里加入了注释却没有使用注释符
//
,或
/*
和
*/
,编译器会认为它们是
C++
表达式,很可能在你编译它的时候编译器会给出一个或多个错误信息。