[TOC]
- 函数: 一段用
{}
包裹的代码块,有一个独一无二的名字做标识。函数可以被其他函数调用。函数可以有返回值和参数。函数的{}
代码块内的程序代码,每次该函数被调用时都会执行。
int compute()
{
return 42;
}
上面的代码中,compute
就是函数的名字,int
表示函数的返回类型——整数。
{{ icon.fun }} 乃取整数之英文“integer”的“int”而得名(模仿侯捷老师说话)
而 {}
包裹的是函数体,是函数被调用时会执行的代码。
此处 return 42
就是函数体内的唯一一条语句,表示函数立即执行完毕,返回 42。
- 返回值: 当一个函数执行完毕时,会向调用该函数的调用者返回一个值,这个值就是
return
后面的表达式的值。返回值可以有不同的类型,此处compute
的返回类型是int
,也就是说compute
需要返回一个整数。
{{ icon.tip }} 关于函数的参数,我们稍后再做说明。
C++ 程序通常由一系列函数组成,其中必须有一个名为 main
的函数作为程序的入口点。
main 函数的定义如下:
int main()
{
}
程序启动时,操作系统会调用 main
函数。
{{ icon.detail }} 严格来说,是 C++ 运行时调用了
main
函数,但目前先理解为“操作系统调用了main
函数”也无妨。
要把程序发展壮大,我们可以让 main
函数继续调用其他函数,也可以直接在 main
函数中编写整个程序的逻辑(不推荐)。
{{ icon.fun }} 因此,
main
可以被看作是“宇宙大爆炸”。
int main()
{
return 0;
}
return
表示函数的返回,main 函数返回,即意味着程序的结束。
main 函数总是返回一个整数 (int
类型),用这个整数向操作系统表示程序退出的原因。
如果程序正常执行完毕,正常结束退出,那就请返回 0。
{{ icon.detail }} 通常来说有返回类型的函数都需要在所有分支都有 return 语句,但有趣的是,C++ 标准对 main 函数做了特殊的“宽大处理”:在控制流达到 main 函数的结尾时,如果没有遇到
return
语句,则等价于执行return 0;
。所以对于你本来就打算返回 0 的情况,也可以偷懒不写return
语句,编译器自动会帮你加上。以及,main 函数必须返回int
类型,不能返回void
类型。
返回一个不为 0 的整数可以表示程序出现了异常,是因为出错了才退出的,值的多少可以用于表明错误的具体原因。
{{ icon.fun }} 操作系统:我调用了你这个程序的 main 函数,我好奇程序是否正确执行了?让我们约定好:如果你运转正常的话,就返回0表示成功哦!如果有错误的话,就返回一个错误代码,比如返回1表示无权限,2表示找不到文件……之类的。当然,错误代码都是不为0的。
TODO: 介绍控制台
int main()
{
std::println("Hello, World!");
}
以上代码会在控制台输出 Hello, World!
。
int main()
{
// 小彭老师,请你在这里插入程序的逻辑哦!
}
这里的 //
是注释,注释会被编译器忽略,通常用于在程序源码中植入描述性的文本。有时也会用于多人协作项目中程序员之间互相沟通。
例如下面这段代码:
int main()
{
std::println("编译器伟大,无需多言");
// 编译器是煞笔
// 编译器是煞笔
// 编译器是煞笔
// 诶嘿你看不见我
}
在编译器看来就只是:
int main()
{
std::println("编译器伟大,无需多言");
}
{{ icon.fun }} (*编译器脸红中*)
C++ 支持行注释 // xx
和块注释 /* xx */
两种语法。
int main()
{
// 我是行注释
/* 我是块注释 */
/* 块注释
可以
有
很多行 */
std::println(/* 块注释也可以夹在代码中间 */"你好");
std::println("世界"); // 行注释只能追加在一行的末尾
std::println("早安");
}
{{ icon.tip }} 在我们以后的案例代码中,都会像这样注释说明,充当就地讲解员的效果。去除这些注释并不影响程序的正常运行,添加文字注释只是小彭老师为了提醒你每一行的代码作用。