C语言赋值时产生的临时量,类型比较时转换,和怎么观察预编译后的程序结果

本文深入探讨C语言的基础知识,包括变量赋值、数据类型转换、运算符优先级及预编译过程。详细解析了不同进制的变量赋值方式,以及预编译如何将源代码转化为.i文件,最终生成可执行文件。同时,文章揭示了补码存储的重要性,以及不同类型变量比较时的类型转换规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

if()
{}
else if()
{}
else if()
{}
else
在上面的if嵌套结构中结尾的else时和最后面的else if结合的,这就是所谓的就近原则

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

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的临时量时,这一步就出现了错误,因为临时量是不允许被修改的。

在不同类型变量的比较时,系统会进行类型转换(针对于基本数据类型),有符号类型和无符号类型比较时会先转换为无符号类型(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 类型的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值