第二课.C++基础语法

编程语言的层次和类型

1.机器语言:字节码,汇编语言:发明了字节码对应的助记符,但依然很难,涉及底层,要操作寄存器;
2.编译型语言:C,C++,易于移植,提高了开发效率;
3.解释型语言:Python,微软早期的Basic,只要安装了解释器,就可以运行;C++不一样,在不同的机器上,需要先编译,生成目标文件才能运行;
4.脚本语言,bash,csh等,本身功能不强,但易于将同一平台上别的程序进行组装;
可见,使用层次越来越接近人类,但运行效率逐渐降低;
编译型语言
编译型语言一般需要经历编译和链接过程,才能变成真正的可执行程序:
fig1
比如在Windows下开发,会生成中间的目标程序.obj,再与他人写好的链接库组合生成最后的可执行文件.exe;
fig2

数据类型

先思考如何做到1+1:

int sum;
int m=1;
int n=1;
sum=m+n;

这样一个简单操作在机器上是如何完成的?
C++是强类型语言,每个变量都应明确定义好类型,数据类型决定了变量所占内存的大小和布局以及变量可以参与的运算;
当定义好变量后,会动态在内存中开辟一个空间存储它,比如m位于1010H,值为1,n位于1012H,值为1,索引地址后取出值,两个值送入CPU进行add操作,返回结果存到sum所在的1016H;
数据类型的内部结构:[15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0],每个位置就是一个bit(位),8个bit组成一个byte(字节),机器习惯二进制表达,人习惯十进制表达,为了便于人对机器进行调试,人们选择十六进制(0到F)表达:
将十进制66转为十六进制为:
fig3
C++中除了整型,还有其他常用类型:

cahr 字节数:1 有符号(signed)-128127;无符号(unsigned)0255
short int 字节数:2 有符号(signed)-3276832767;无符号(unsigned)065535
long int 字节数:4 区分有符号和无符号
int 字节数:4 区分有符号和无符号
float 字节数:4
double 字节数:8
bool 字节数:1 true或者false

常见数据类型定义方式:

char a[10]="a";//字符a的ascii码为97
short int s=66;
int m=6;
long int n=66;
float f=3.14;
double d=3.14;
bool b=true;

集成开发环境

集成开发环境:Integrated development environment,集成了源码编辑,编译,链接,以及调试,项目管理等功能;
个人认为微软的软件做得很优秀,所以更偏好windows下的visual studio,而且现在的vs已经可以兼容linux,visual studio对使用者确实很友好;
通过installer勾选需要的项目,有两个最好选择的项目:
fig4
最好再勾选扩展插件:
fig5
用命令devenv.exe可以打开visual studio;
创建第一个cpp文件有:

// CppData.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
int main():{
	char a[10]="a";//字符a的ascii码为97
	short int s=66;
	int m=6;
	long int n=66;
	float f=3.14;
	double d=3.14;
	bool b=true;
}
// 入门使用技巧:
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

在main函数体内设置断点(F9),然后调试(F5),可以看到内存使用情况:
fig6
注意,一般内存对应值全是c的情况代表此区域是没有做任何初始化的区域,除此之外,也可以看到局部变量的情况,这是执行完第一句的情况:
fig7

以前上计算机组成原理课时,老师习惯让内存区域显示为一行2字节,所以修改后内存监视的情况为:
fig8
根据局部变量窗口,索引到a的地址,有如下内容:
0x0095F9A4 61 00 a.
0x0095F9A6 00 00 …
0x0095F9A8 00 00 …
0x0095F9AA 00 00 …
0x0095F9AC 00 00 …
可见到数组的名称就是数组的地址,连着头部连续开辟了10个byte的空间,因为声明是char a[10],且一个char占用1byte;声明中,数组首元素是字符a,所以内存中的值为61(a的ascii为97,16进制表示正好是61);
关于可执行文件生成的位置,可以在解决方案生成的窗口看到信息:
fig9
关于无法查找PDB文件
在调试窗口的输出中,会看到:
fig10希望的情况是成功加载符号文件,但在我第一次使用visual studio时,看到了这样的信息:
fig11
先分析产生这样的情况原因:
当程序在 VS 上编译时,程序所依赖的所有动态链接库(dll 文件)也会被编译,编译过程中每个 dll 都会产生一个pdb文件,又称为“符号文件”,是一个存储数据的信息文件,其包含 dll 库在编译过程的某些调试信息,例如程序中所用到的全局变量、局部变量、函数名以及他们的入口地址等;
pdb 文件主要用于调试程序,多用于当VS中有多个项目,且项目之间互有依赖关系时,使用pdb文件调试程序,往往会事半功倍,初学者一般不会用到;
所以这不是错误消息,在使用调试功能时,vs尝试加载系统dll生成的pdb文件进行调试,而通常系统是没有这些pdb文件的,导致的结果是无法调试系统dll。但是由于这些都是系统dll,绝大多数情况下我只是调试自己的程序,而不需要调试系统dll,因此把它们忽略掉就行;

语言的标识符和关键字

标识符是用来标识变量,函数,类,模块,或任何其他用户自定义项目的名字,标识符以A-Z或a-z或下划线开头,不允许以数字开头,标识符内不允许出现特殊字符@,&,%等,C++区分大小写,不能使用关键字作为标识符;
标识符的规范:
追随大众的命名风格;
标识符应直观,不要使用拼音;
长度适中;
变量命名少出现数字,比如value1,value2就不太好;
变量,函数小写,类使用Pascal命名,常量使用大写;
关键字是系统保留的符号,比如if,for,asm,char等;
C++关键字是在不断更新的,可以通过以下链接及时了解关键字:
cpp关键字更新表


Pascal:
每个单词首字母大写,如:int MyAge
微软用的匈牙利命名法:
开头字母用变量类型的缩写,其余用Pascal,如:int iMyAge


变量与常量

变量:在程序运行过程中,值可以改变的量;变量在程序的执行中可以被赋值,发生变化;变量在使用前需要类型声明,一旦声明,其会在内存中占据类型对应的存储单元;
变量定义:
类型说明+一个或多个名称(逗号分隔)+分号结尾,创建变量时,可以给一个值用于初始化:

int m=1,n=1;
int sum=m+n;

常量:在程序运行中,其值一直保持不变的量;
C++有两种方法定义常量:

#define PI 3.1415926
const double PI=3.1415926

使用define,在编译时出错,很难排查;使用const,在编译时出错容易排查;
define只是单纯的宏替换,而const可以被编译器检查到语法错误,所以const更安全;
整数常量可以表达为各种进制:
前缀0x或0X表16进制,0表示8进制,不带前缀表示10进制;
后缀U代表unsigned,L代表long,后缀大小写随意,U和L顺序任意;

212 //合法
215u //合法
0xFeL //合法
078 //非法,8不是8进制数值
032UU //非法,后缀不能重复

字符常量使用单引号’c’,转义字符是字符常量之一,用斜杠\转义;

注释

汇编,C,C++,Java,Python没有注释都是很难读的,所以编程语言最好包含注释;
C++可以单行注释,也可以多行注释:

//单行注释

/*块注释*/

在块注释内,//没有特殊含义,在单行注释下,/**/也没有特殊含义;
先写注释再写代码,可以确保代码注释的一致性;
在Visual Studio中,批量注释选定内容为:

Ctrl+K,Ctrl+C

批量取消为:

Ctrl+K,Ctrl+U
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值