一、编程语言的发展史
1、机器语言:二进制指令
2、汇编语言:操作系统底层驱动会用到
3、C
4、C++:在C上增加了类。标准有C++98、C++11等
5、java:C++子集
6、python:脚本语言
7、scratch:可视化编程语言,定义许多模块,直接拖动使用
二、直接编译
g++ hello.cpp
初始化标准是c++11,g++默认标准比c++11低,会编译出错
g++ hello.cpp --std=c++11
./a.out
使用--std告诉编译器采用c++11标准。执行成功后会生成一个可执行文件a.out
./a.out执行可执行文件,即可输出结果
g++ hello.cpp --std=c++11 -o hello
./hello
使用-o 可以改变生成的可执行文件名
./hello执行命令,输出结果
注:我在实际操作时,使用g++ hello.cpp并没有报错,所以没有特意指定编译器按c++11标准去执行
三、编译和链接(complie and link)
遇到规模较大的程序时,需要将程序分别放在不同的文件里。
函数的声明:.h 或.hpp
函数的实现:.cpp
main函数:.cpp
linux系统中使用的编译器是g++
程序的编译和链接:源代码——>object文件——>可执行程序
g++ -c main.cpp && g++ -c mul.cpp
-c即编译,分别将两个.cpp源文件编译成两个.o文件
g++ main.o mul.o -o mul
-o即链接,将两个.o文件链接,生成可执行文件mul
./mul
执行命令
也可以直接编译生成可执行文件:
g++ main.cpp mul.cpp -o mul
直接编译:遇到多个.cpp文件时,一个个输入很麻烦
分开编译:使用Makefile会方便许多
四、调试程序(debug)
- 错误类型:编译错误、链接错误、运行错误
- 编译错误:一般由语法错误造成,依照错误提示去指定位置查
- 链接错误:多个程序文件均无语法错误,可生成.o文件,但在链接时报错
依照报错查看哪个文件未链接上,去此文件中修改错误
如下图,把mul.cpp中函数名从mul修改为Mul,文件在编译时无语法错误,但链接 时报错:找不到mul函数。
- 运行错误:生成可执行文件成功,在运行可执行文件时出错
写程序时必须要考虑多种情况,否则程序可能抛出异常
如下图,在mul.cpp的mul函数中添加一行代码:int c = a / b,运行时输入参数2和
0,报错:程序直接被杀死。
五、基础语法
预处理和宏
- 预处理:在正式编译前的步骤,使用预处理器去处理预处理指令,如#include #define #ifdef #endif等
- 宏:由#define指令定义,类似于全文替换(#define PI 3.14)
函数结构——基本名词
- 函数返回类型:return 后接的返回值类型
- 函数名:
- 形参:函数头()中的内容,表示函数输入的参数,没有入参可以直接用(),或者(void)
- 函数体:{}里的内容统称函数体
- 返回语句:eg:return 0; 有的函数可以没有返回值,函数返回类型会用void
- 返回值:给调用函数返回的值,return后接的值即为返回值,一般在调用函数中定义一个变量来接收这个返回值
main函数的返回值不返回给其他程序,而是返回给操作系统
注释
- 单行注释://
- 多行注释:/**/
头文件
头文件用#include<>包含,C++中由很多自带的头文件库,其中iostream就是包含输入输出的头文件
命名空间
许多类、函数、变量都在命名空间中,如cout、cin、endl等都在命名空间std中。
程序访问命名空间std的方法:
- 把using namespace std;放在函数定义之前,让所有函数都能使用std中的所有元素
- 把using namespace std;放在特定的函数定义中,让该函数能访问
- 在特定的函数中使用using std::cout等,让该函数中能使用指定的元素
- 不适用using,在使用时在元素前加std::,如std::cout
输入输出
- 输入:cin >> "" >> endl;
- 输出:cout << "" << "" << endl;
cout是ostream类的对象,cin是istream类的对象
ostream类和istream类被定义在iostream文件中
两种换行符(当前指令结束后换到下一行):endl 、 \n(沿用C的语法)
变量
要将信息存储在计算机中,必须指明存储的地址和会占用的内存空间大小
- 定义(声明):int a;指出了存储类型、会占用的内存空间和该内存单元的名称
- 初始化(赋值):a = 10;给这块内存空间存入数据
使用变量前必须先声明并初始化它
变量名的命名规则:
- 只能使用数字、字母和下划线_,数字不能在开头
- 区分大小写
- 不能使用C++关键字命名
- 两个下划线_和大写字母开头的将保留给实现使用
- 一个下划线开头的将用作全局标识符
- 有些平台会有长度限制