当前位置:首页 > 原创 > 振南技术干货集(风云录)
[导读]另外,有时候优先级还与C语言编译器有关,同一个表达式在不同的平台上,可能表达的意义是不同的。所以,为了代码的可植移性、正确性以及可读性,振南强烈建议多用一些()。

多用()无坏处

!0+1,它的值等于多少?其实连我这样的老手也不能马上给出答案,2还是0?按C语言规定的运算符优先级来说,应该是!大于+,所以结果应该是2。

但是如果把它放在宏里,有时候就开始坑人了:

#define VALUE !0+1

int a;

a=VALUE&0;

踩过此类坑的人无需多说,自能领会。a=2&0呢,还是a=!0+1&0呢?它们的值截然不同。

这里出现了一些运算优先级和结合律的差错。为了让我们的语义和意图正确的得以表达,所以建议多用一些()。

#define VALUE ((!0)+1)

int a;

a=VALUE&0;

这样,a的值就一定是0了。

另外,有时候优先级还与C语言编译器有关,同一个表达式在不同的平台上,可能表达的意义是不同的。所以,为了代码的可植移性、正确性以及可读性,振南强烈建议多用一些()。

==的反向测试

C语言中的=与==,有时候是一个大坑。主要体现在条件判断时的值比较,如下例:

int a=0;

If(a=1)

{

//代码

}

也许我们的原意是判断a若为1,则执行。但实际上if根本不起作用,因为错把==写成了=。

C语言中的赋值操作也是一种表达式,称为赋值表达式,它的值即为赋值后变量的值。而C语言中条件判断又是一种宽泛的判断,即非0为真,为0则假。所以if(a=1)这样的代码编译是不会报错的。

这种错误通常是很难排查出来的,尤其是在复杂的算法中,只能一行行代码的跟踪。所以对于变量值的比较判断,振南建议使用“==的反向测试”,并养成习惯。

int a=0;

if(1==a)

{

//代码

}

如果把==错写成了=,因为常量无法被赋值,所以编译时会报错。

赋值操作的实质

原来一位哈工程理学院教授(搞数学的)讲述了自己的一个困惑,一直以来都被我们当成一个笑话在说。他学C语言的时候,首先a=1,然后后面又来一个a=2,这让他非常不解,a怎么可能同样等于1又等于2呢?

其实这是因为他对计算机运行机制不了解,这个a不是他数学稿纸上的代数变量,而是计算机中实实在在的“电”,或者说“信号”,如图2.7所示。

图2.7 计算机中CPU与存储器的寻址与数据传输

其实不限于C语言,所有编程语言的目的都是控制计算机硬件,实现电信号的传输、存储等操作,最终达成某一功能。变量是存储器中的一小块空间,它源自于形如int a这样的代码编译后由编译器所作的存储器分配。对变量的赋值就是CPU内核通过三总线将数据传输到存储器特定地址单元上的过程。所以,a=1;a=2;只是两次数据传输过程而已。

这个教授当时算是个外行,其实对于我们也是一样的,想要真正掌握编程语言,只流于代码表面的意思是不行的,必须对它在硬件上产生的操作有明确的认识,对计算机内部的运行机理有深入理解才可以。

声明:该篇文章为本站原创,未经授权不予转载,侵权必究。
换一批
延伸阅读

C++编程语言中的一种强大功能是模板,它允许我们编写泛型代码,使得我们的函数或类可以对多种数据类型进行操作。在这篇文章中,我们将详细介绍如何在C++中使用模板来编写泛型代码。

关键字: C++ 编程语言

在编程语言的浩瀚宇宙中,C语言以其卓越的执行效率和运行速度脱颖而出,成为众多高性能应用的首选。那么,C语言究竟是如何实现这一高效性的呢?本文将深入探讨C语言高效执行背后的原因,并通过代码示例加以说明。

关键字: C语言 编程语言

虽然C语言有其优势和限制,但它仍然是一种非常重要和有用的编程语言。它被广泛应用于系统级编程、嵌入式开发和驱动程序等领域。对于想要深入了解计算机底层工作原理的开发人员来说,掌握C语言是必不可少的。

关键字: C语言 编程语言

单片机系统优化是指通过对系统硬件和软件的合理配置、优化算法和数据结构、减少资源占用等方式,提升系统的运行效率和响应速度。优化的目标是使系统能够更好地满足实际需求,提高用户体验和产品的竞争力。

关键字: 单片机 编程语言

在探讨未来哪种编程语言将在AI时代占据主流地位时,我们需要回顾历史,审视当前趋势,并预测未来技术的发展方向。AI(人工智能)技术的快速发展已经深刻影响了编程语言的选择和应用,而未来的主流编程语言将需要具备高效性、灵活性、...

关键字: AI 编程语言

成功开发和推出嵌入式系统需要各种工程学科的广泛技能。每个嵌入式系统开发团队都需要八个不同的软件开发领域的知识。开发人员对嵌入式软件这八个支柱的掌握程度将直接影响开发成本、代码可扩展性和系统稳健性等关键开发指标。

关键字: 嵌入式软件 编程语言

编程语言确实会影响程序性能。不同的编程语言具有不同的优缺点,同时也会受到它们的底层实现和执行环境的影响。在编写程序时,开发人员需要根据实际需求和特定情况选择合适的编程语言,并且采用一些优化技巧来提高程序性能。

关键字: 编程语言 算法

TIOBE 编程语言排行榜是基于全球工程师的数量、课程、热门网站、第三方供应商综合计算出来的,只是一个编程语言流行度和趋势的反映,并不代表语言之间的优劣,也不能反映国内的就业情况。

关键字: 编程语言 Python

与 BigCode 社区共同创建的 StarCoder2 是在 600 多种编程语言上训练而成,它将推进代码生成、透明度、治理和创新

关键字: 生成式 AI 编程语言 大语言模型

Java是一种广泛应用于软件开发的编程语言,它具有跨平台、面向对象和高度可靠性的特点。在嵌入式系统设计中,Java也有着广泛的应用方案。本文将详细介绍Java在嵌入式系统设计中的应用方案,并分析其优势和挑战。

关键字: Java 软件开发 编程语言
关闭