从Hello world谈起
函数
- 定义:可以被反复调用的代码,可以接受输入,
结构
- 返回类型:void(不需要返回值),函数体中返回的类型要和返回类型一致,非void,一定要有返回语句,main函数可以没有
- 函数名:用于函数调用
- 函数体:具体的执行逻辑
- 形参列表:表示函数接受的参数类型。形参(下例中 const char* pInfo)与实参(下例中的“hello world”“hello china”)的概念
main函数返回类型只有int,用于表示程序执行状态,错误代码
- 敏感大小写,不能使用Main
形参列表只有两种形式,其他形式会报warning,形参名字可改变
一条语句:表达式+分号
- 语句块:{ }
- if/while等语句
注释
- 用途:会被编译器忽略的内容,用于编写说明or 去除不使用的语句
- 块注释/**/:应用有意忽略的形参列表
- 行注释//:
系统I/O
输出流的区别
- 输出目标:cout/cerr/clog输出到显示器并无区别,可以输出到不同文件,cerr只输出错误信息(立即刷新缓冲区),clog表示不立即刷新缓冲区
- 是否立即刷新缓冲区:输出机制,由于IO操作比较慢,先存入缓冲区,满了之后再存到内存,能够及时看到错误信息
- std::flush只刷新缓冲区,std::endl刷新缓冲区+换行。效率低,只在必要的时候刷新缓冲区
命名空间:
using 语句可以放在函数内部,放在函数体外,尤其是放在头文件中,很容易出现冲突,最安全的写法是::
namespace NameSpace1
{
void fun(){};
}
namespace NameSpace2
{
void fun(){};
}
int main()
{
//域解析符 ::
NameSpace1::run();
//using 语句
using namespace NameSpace1;
//名字空间别名
namespace ns1 = NampSpace1;
ns1::fun();
}
mangling:名称改编
如下图,为该程序的对外接口,命名空间NameSpace1下的函数fun,被编译为_ZN10NameSpace13funEv
demangling
nm ./main.cpp.o | c++filt -t
#include
猜数字与控制流
if(y = 42)为了避免编写错误,可把常量放在左边进行条件判断
代码三种执行方式:顺序执行,分支执行(if),循环执行(while)