C语言的一些基础知识,和怎么观察预编译后的程序结果

C语言的一些零碎基础知识

首先在给变量赋值的时候要注意格式

int a=10//十进制
int a=010//八进制
int a=0x10//十六进制

下面是关于程序生成的过程:首先.c和.cpp文件被称为ASCII字符的文本文件,然后经过预编译形成.i文件(在预编译时主要的功能是:宏定义、文件包含、条件编译。),然后经过编译形成.o/.obj文件,随后经过链接可以形成.exe可执行文件。
这里为了方便大家理解预编译所干的事,我在下面附上对编译器的流程截图(本人使用的是vs2013)另外注意在开启这个功能后程序生成是只执行预编译功能。
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里将预处理到文件从是改为否就设置成功了。
然后选中“在文件资源管理器中打开文件夹在这里插入图片描述
在这里插入图片描述
打开Debug文件夹,在这里插入图片描述
右键.i文件,选择编辑,然后会进入记事本,将记事本的移动条拖到最下面,就可以看见程序预编译后的结果,也就可以知道程序在预编译是干了什么事了。
+++++++++++++++++分割线+++++++++++++++++++++++++++

在cpu中,只做加法处理,位移操作和取反,所以用补码存放数据十分重要,因为采取补码后,可以把减法变为加上其补码的加法运算。
在变量赋值时,会生成一个临时量作为桥梁来进行赋值预算。且临时量只能读取不能修改,具有常性
比如++a=c在编译时可以通过,但++a是一个表达式。之所以通过编译是因为,++a是前置加加,它的操作时将a放入一个临时量,在对临时量进行加加处理,然后在赋值给a。
a++=c,这样编译不能通过这是因为,后置加加的执行顺序为,将a放入临时量,然后将c的值给a的临时量,再将临时量还给a,再将a放入临时量,在对其加加,在将临时量还给a。但是在将c的值给a的临时量时,这一步就出现了错误,因为临时量是不允许被修改的。

小端存放
小端存放的意思是将高位数存放在高地址,低位数存放在低地址
例如:
int y=0x 12 34 56 78
内存中:
0x0012ff1c 78
0x0012ff1d 56
0x0012ff1e 34
0x0012ff1f 12
检查电脑是否是小端存放,可以通过使用联合体的特性在检测,当然也可以使用指针来判断

在不同类型变量的比较时,系统会进行类型转换(针对于基本数据类型),有符号类型和无符号类型比较时会先转换为无符号类型(unsigned),当int,float,double类型比较时都会转换为double类型在比较。
他们的优先级从低到高为:
bool/char/short->int->usigned->double->long double
正式因为存在这种类型转换所以会出现以下的情况

int a=-5<usigned int b=10;

另外sizeof(int)=4这个4时无符号int 类型的。

猜你喜欢

转载自blog.csdn.net/qq_40738945/article/details/85223391