c语言编写过程中什么时候可以用省略写法什么时候不能使用
最近我在写stm32单片机程序发现stm32的HAL库中写的代码有很多省略写法我这里说的省略写法不是指HAL库中烧了什么函数的意思毕竟HAL库的代码水平还是很高的有很多值得我们学习的地方。我说的省略写法是指在函数内部有些临时栈变量用于接收某个函数的返回值或者某个中间变量在编写代码过程中省略了今天要讨论的是这种省略临时栈变量或者中间变量的写法什么时候是可以省略的什么情况是不能省略的。首先这种省略写法的好处就是提高代码在某一行的有效占比毕竟某一行的空白区域越小有效代码含量越高这一行的代码质量也越高相对的如果每一行空白区域或者留白区域过多这一行代码质量就越低。因此在很多函数编写中例如在if(条件判断)中直接调用某一个函数然后直接进行比较这样这一行的代码空白区域就很少代码质量就很高例如if (ApplyCalibration(data) ! ERR_OK) { return xxx; }但是上述代码有个问题返回值xxx我是想使用它的但是如果这样的省略写法省略定义一个临时栈变量 uint8_t ret去接收函数AppCalibration()运行的结果是无法得知返回值到底是什么的因此这种省略写法是行不通的需要修改成这样uint8_t ret ApplyCalibration(data); if (ret ! ERR_OK) { return ret; }我们分析两种写法的区别找出需要定义临时栈变量的原因是什么可能有人是函数ApplyCalibaration(data)的返回值是一个变动的元素变动的元素如果需要描述的话就需要定义某一个变量因此需要定义uint8_t ret去接收函数ApplyCalibration(data)的返回值。我想说这种说法是错误的第一种省略写法中函数直接调用也形成一个隐式可变元素也是一个隐式变量只是没有和第二种写法一样显示的写出来罢了。我的答案是不能使用省略写法函数内部需要定义临时栈变量的依据是这个变量是否被“读操作”至少2次以上。如果只有一次“读操作”为了提高代码质量完全有必要不定义临时栈变量这样还能少一次栈内存申请提高代码运行效率相对的如果有至少两次或者以上“读操作”的发生那必须要定义临时栈变量而且也没有其他更加有效的办法毕竟不能再调用一次函数吧因为函数调用也是很耗费CPU资源的。