Home C&C++函数库 c++ 语法 程序源码 Linux C库

程序的结构

  学习编程语言的最好方法是编写程序。通常,初学者编写的第一个程序是一个名为“Hello World”的程序, 它只是将“Hello World”打印到您的计算机屏幕上。尽管它非常简单,但它包含了 C++ 程序具有的所有基本组件:


1 // my first program in C++
2 #include <iostream>
3
4 int main()
5 {
6   std::cout << "Hello World!";
7 }
Hello World!

上面的左面板显示了该程序的 C++ 代码。右侧面板显示了程序由计算机执行时的结果。
面板左侧的数字是行号,使讨论程序和研究错误更容易。他们不是该程序的一部分。

让我们一行一行地检查这个程序:

第 1 行: // my first program in C++
    两个斜杠表示该行的其余部分是程序员插入的注释,但对程序的行为没有影响。
    程序员使用它们来进行关于代码或程序的简短解释或观察。在这种情况下,它是程序的简要介绍性描述。

第 2 行: #include <iostream>
    以井号 ( #)开头的行是由预处理器读取和解释的指令。它们是在程序本身开始编译之前解释的特殊行。
    在这种情况下,指令#include <iostream> 指示预处理器包含一段标准 C++ 代码,称为头文件 iostream,
    它允许执行标准输入和输出操作,例如写入该程序的输出(Hello World!) 到屏幕。

第 3 行:空行。
    空行对程序没有影响。它们只是提高了代码的可读性。

第 4 行: int main ()
    这一行开始了对一个函数的声明。
    本质上,函数是一组被赋予名称的代码语句:
    这样将把名称“main”赋予后面的代码语句块。
    函数将在后面的章节中详细讨论,
    但本质上,它们的定义是通过一系列类型 ( int )、名称 ( main ) 和一对括号 ( () )引入的,
    可选选项包括参数。

    命名main的函数是所有 C++ 程序中的一个特殊函数;它是程序运行时调用的函数。
    所有 C++ 程序的执行都从main函数开始,而不管函数在代码中的实际位置。

第 5 行和第 7 行:"{"和"}"
    第5 行的左大括号 ( { ) 表示main函数定义的开始,第7 行的右大括号 ( } ) 表示其结束。
    这些大括号之间的代码都是函数的主体,它定义了main调用时会发生什么。
    所有函数都使用大括号来表示其定义的开始和结束。

第 6 行: std::cout << "Hello World!";
    这一行是一个 C++ 语句。语句是一种实际上可以产生某种效果的表达式。
    它是程序的核心,表示其实际作用。语句的执行顺序与它们出现在函数体内的顺序相同。
    该语句有三个部分:一是std::cout,它表示标准输出设备(通常,这是计算机屏幕)。
    其次,写入运算符 ( << ),表示后面的内容被写入到 std::cout中。
    最后,引号内的句子(“Hello world!”)是写入到标准输出中的内容。

    请注意,该语句以分号 (;)结束。这个字符标志着语句的结束,就像句号结束句子一样。
    所有 C++ 语句都必须以分号字符结尾。C++ 中最常见的语法错误之一是忘记以分号结束语句!

    您可能已经注意到,在执行代码时,并非该程序的所有行都执行操作。
    有一行包含注释(以 // 开头)。有一行带有预处理器的指令(以 # 开头)。
    有一行定义了一个函数(在本例中为main函数)。最后一行包含以分号结尾的语句(写入到cout),
    它位于由函数的大括号 ( { } )分隔的块内main。
    该程序已按不同的行构建并适当缩进,以便阅读它的人更容易理解。
    但是 C++ 对缩进或如何在不同行中拆分指令没有严格的规则。例如

1	int main ()
2	{
3		std::cout << " Hello World!";
4	}

我们可以这样写:
int main () { std::cout << "Hello World!"; }

全部在一行中,这与上面的代码具有完全相同的含义。

在 C++ 中,语句之间的分隔是用结束分号 ( ;)指定的,因此分隔成不同的行根本无关紧要。
许多语句可以写在一行中,或者每个语句都可以单独一行。
代码在不同行中的划分只是为了让可能阅读它的人更易读和更具示意图,
但对程序的实际行为没有影响。

现在,让我们在我们的第一个程序中添加一条额外的语句:

1 // my first program in C++
2 #include <iostream>
3
4 int main()
5 {
6   std::cout << "Hello World!";
7   std::cout << "I'm a C++ program";
8 }
Hello World! I'm a C++ program

在这种情况下,程序std::cout在两个不同的语句中执行了两次写入。
再说一次,不同代码行的分离只是为程序提供了更大的可读性,因为main以这种方式定义完全有效:

int main () { std::cout << " Hello World! "; std::cout << " I'm a C++ program "; }

源代码也可以分成更多的代码行:

1 int main ()
2 {
3   std::cout <<
4     "Hello World!";
5   std::cout
6     << "I'm a C++ program";
7 }
Hello World! I'm a C++ program

结果将再次与前面的示例完全相同。

预处理器指令(那些以 # 开头的指令)不属于这个一般规则,因为它们不是语句。
它们是在正确编译开始之前由预处理器读取和处理的行。
预处理器指令必须在它们自己的行中指定,并且因为它们不是语句,所以不以分号 ( ;)结尾。

☞ 注释


    如上所述,注释不影响程序的运行,它是C语言提供的一个重要的工具:
    可以直接在源代码中记录程序的功能和运行方式.

C++ 支持两种注释代码的方式:
1 // line comment
2 /* block comment */
第一个,称为行注释,忽略从斜杠 ( //) 到同一行末尾的所有内容。
第二个,称为块注释,忽略/*字符和*/字符第一次出现之间的所有内容,可能包含多行。

让我们为第二个程序添加注释:
1  /* my second program in C++
2     with more comments */
3
4  #include <iostream>
5
6  int main ()
7  {
8    std::cout << "Hello World! ";     // prints Hello World!
9    std::cout << "I'm a C++ program"; // prints I'm a C++ program
10 }
Hello World! I'm a C++ program

如果在程序的源代码中包含注释而不使用注释字符组合//,/*或*/,编译器会将它们视为 C++ 表达式,
很可能会导致编译失败并显示一个或多个错误消息。

☞ 使用命名空间 std


如果您之前看过 C++ 代码,您可能已经看到cout使用std::cout.
两者都命名同一个对象:第一个使用它的非限定名称( cout),
而第二个直接限定它在命名空间std内(如 std::cout)。

cout是标准库的一部分,
标准 C++ 库中的所有元素都在所谓的命名空间中声明:命名空间std。

如果要使用std名称空间中的元素,我们必须给每个元素加引用,(如,我们通过给cout加前缀std::)
或引入其元素的可见性。引入这些元素可见性的最典型方法是使用声明:

using namespace std;

上述声明允许std以非限定方式(不带std::前缀)访问命名空间中的所有元素。

因此,可以重写最后一个示例,以对cout进行非限定方式的使用:

1  // my second program in C++
2  #include <iostream>
3  using namespace std;
4
5  int main ()
6  {
7  	  std::cout << "Hello World! ";
8     std::cout << "I'm a C++ program";
9  }
Hello World! I'm a C++ program

     访问std命名空间元素的两种方式(显式限定和使用声明)在 C++ 中都是有效的,并且产生完全相同的行为。为简单起见并提高可读性,这些教程中的示例将更频繁地使用后一种方法和using声明,但请注意,显式限定是保证永远不会发生名称冲突的唯一方法。

命名空间在后面的章节中有更详细的解释。
联系我们 免责声明 关于CandCplus 网站地图