你好,世界

什么是函数

  • 函数: 一段用 {} 包裹的代码块,有一个独一无二的名字做标识。函数可以被其他函数调用。函数可以有返回值和参数。函数的 {} 代码块内的程序代码,每次该函数被调用时都会执行。
int compute()
{
    return 42;
}

上面的代码中,compute 就是函数的名字,int 表示函数的返回类型——整数。

乃取整数之英文“integer”的“int”而得名(模仿侯捷老师说话)

{} 包裹的是函数体,是函数被调用时会执行的代码。

此处 return 42 就是函数体内的唯一一条语句,表示函数立即执行完毕,返回 42。

  • 返回值: 当一个函数执行完毕时,会向调用该函数的调用者返回一个值,这个值就是 return 后面的表达式的值。返回值可以有不同的类型,此处 compute 的返回类型是 int,也就是说 compute 需要返回一个整数。

关于函数的参数,我们稍后再做说明。

从 main 函数说起

C++ 程序通常由一系列函数组成,其中必须有一个名为 main 的函数作为程序的入口点。

main 函数的定义如下:

int main()
{
}

程序启动时,操作系统会调用 main 函数。

严格来说,是 C++ 运行时调用了 main 函数,但目前先理解为“操作系统调用了 main 函数”也无妨。

要把程序发展壮大,我们可以让 main 函数继续调用其他函数,也可以直接在 main 函数中编写整个程序的逻辑(不推荐)。

因此,main 可以被看作是“宇宙大爆炸”。

main 函数的返回值

int main()
{
    return 0;
}

return 表示函数的返回,main 函数返回,即意味着程序的结束。

main 函数总是返回一个整数 (int 类型),用这个整数向操作系统表示程序退出的原因。

如果程序正常执行完毕,正常结束退出,那就请返回 0。

通常来说有返回类型的函数都需要在所有分支都有 return 语句,但有趣的是,C++ 标准对 main 函数做了特殊的“宽大处理”:在控制流达到 main 函数的结尾时,如果没有遇到 return 语句,则等价于执行 return 0;。所以对于你本来就打算返回 0 的情况,也可以偷懒不写 return 语句,编译器自动会帮你加上。以及,main 函数必须返回 int 类型,不能返回 void 类型。

返回一个不为 0 的整数可以表示程序出现了异常,是因为出错了才退出的,值的多少可以用于表明错误的具体原因。

操作系统:我调用了你这个程序的 main 函数,我好奇程序是否正确执行了?让我们约定好:如果你运转正常的话,就返回0表示成功哦!如果有错误的话,就返回一个错误代码,比如返回1表示无权限,2表示找不到文件……之类的。当然,错误代码都是不为0的。

这个黑色的窗口是?

TODO: 介绍控制台

打印一些信息

int main()
{
    std::println("Hello, World!");
}

以上代码会在控制台输出 Hello, World!

注释

int main()
{
    // 小彭老师,请你在这里插入程序的逻辑哦!
}

这里的 // 是注释,注释会被编译器忽略,通常用于在程序源码中植入描述性的文本。有时也会用于多人协作项目中程序员之间互相沟通。

例如下面这段代码:

int main()
{
    std::println("编译器伟大,无需多言");
    // 编译器是煞笔
    // 编译器是煞笔
    // 编译器是煞笔
    // 诶嘿你看不见我
}

在编译器看来就只是:

int main()
{
    std::println("编译器伟大,无需多言");
}

(*编译器脸红中*)

C++ 支持行注释 // xx 和块注释 /* xx */ 两种语法。

int main()
{
    // 我是行注释
    /* 我是块注释 */
    /* 块注释
        可以
         有
          很多行 */
    std::println(/* 块注释也可以夹在代码中间 */"你好");
    std::println("世界"); // 行注释只能追加在一行的末尾
    std::println("早安");
}

在我们以后的案例代码中,都会像这样注释说明,充当就地讲解员的效果。去除这些注释并不影响程序的正常运行,添加文字注释只是小彭老师为了提醒你每一行的代码作用。