当前位置:首页 > 工业控制 > 电子设计自动化
[导读]作者:杨硕,华清远见嵌入式学院讲师。C语言的设计哲学要求对象的声明形式和它的使用形式尽可能相似,比如一个int类型的指针数组被声明为int *p[3];并以*p[i]这样的表达式引用或者使用指针所指向的int数据,所以它的

作者:杨硕华清远见嵌入式学院讲师。

C语言的设计哲学要求对象的声明形式和它的使用形式尽可能相似,比如一个int类型的指针数组被声明为int *p[3];并以*p[i]这样的表达式引用或者使用指针所指向的int数据,所以它的声明形式和使用形式非常相似。这样做的好处是各种不同操作符的优先级在“声明”和“使用”时是一样的,而缺点恰好在与C语言的操作符的优先级过于复杂(有15级或者更多,取决于你怎么算),这是C语言设计不当、过于复杂之处。

实际上有些关键字只能出现在声明中,而不是使用中,比如volatile和const等,这使得声明形式和使用形式能完全对的上号的例子越来越少了。如果想要把什么东西强制转换为指向数组的指针,就不得不使用下面的语句来表示这个强制类型转换:

———char (*j) [ 20 ];

———j = ( char ( * )[20] ) malloc(20);

这个强制类型转换看上去很滑稽,星号两边的括号看上去可有可无,但是如果去掉就会变成非法语句。

涉及指针和const得声明可能会有下面几种不同的组合:

———const int * p;

———int const * p;

———int * const p;

前两种情况,指针所指向的对象是只读的,而最后一种情况下指针是只读的。

如果我们想让对象和指针都是只读的,那么下面两种声明都能做到这一点:

———const int * const p;

———int const * const p;

经过初级篇、中级篇一直到前面的学习我们发现其实分析一个声明就是按照操作符优先级规则把声明分解开来,分别解释各个组成部分。要理解一个声明,必须要懂得其中的优先级规则,下面是《C专家编程》中总结的C语言声明的优先级规则:

A声明从它的名字开始读取,然后按照优先级顺序依次读取;

B 优先级从高到低依次是:

B.1 声明中被括号括起来的那部分;

B.2 后缀操作符:括号()表示这是一个函数,而方括号[]表示这是一个数组;

B.3 前缀操作符:星号*标识“指向……的指针”;

C 如果const和(或者)volatile关键字的后面紧跟类型说明符(如int,long等),那么它作用于类型说明符,在其他情况下,const和(或)volatile关键字作用于它左边紧邻的指针星号。

现在,让我们用优先级规则来分析C语言的一个较复杂的声明:

———char * const *(*next) ();

B.1(*next)——next为一个指向……的指针

B.2(*next)()——next是一个函数指针

B.3*(*next)()——next是一个函数指针,这个函数返回一个指向……的指针

Cchar * const——指向字符类型的常量指针

故 char * const *(*next)();的含义就是:next是一个函数指针,这个函数返回一个指向字符类型的常量指针。

我想到现在我们是不是发现分析C语言声明其实并不像一开始那么令人感到无比痛苦,它反而给我们带来了乐趣,不是吗?其实我们只要多分析几个实例,多读一些高质量的C代码,那么分析一个C语言声明不再是一件可怕的事情(更何况我们还有cdecl这个强大的声明解释器呢,呵呵!),这匹野马一旦被我们驯服了,那么它将帮助我们编写出高质量的C代码。你准备好了吗?

“本文由华清远见
http://www.embedu.org/index.htm提供”



来源:华清远见0次

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分,通常嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板,事实上所有带有数字接口的设备,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整...

关键字: 嵌入式 语言 技术

语音编码器的主要功能就是把用户语音的PCM(脉冲编码调制)样值编码成少量的比特(帧)。这种方法使得语音在连路产生误码、网络抖动和突发传输时具有健壮性(Robustness)。在接收端,语音帧先被误码为PCM语音样值,然后...

关键字: 语音编码器 PCM 语言

模糊控制算法(理论知识)

关键字: 模糊控制 语言

前言ARM嵌入式和单片机学习有着密不可分的关系,在学习单片机的过程中积累必要的学习经验和知识是非常有必要的,如何在这一过程中逐渐成为高级嵌入式工程师呢?本文将为大家介绍如何在学习过程中,积累成为高级嵌入式系统硬件工程师要...

关键字: 高级 硬件工程师

任何一种“语言”,都是各种“语言特性”的组合。

关键字: 程序 语言 嵌入式

由于新冠疫情,口罩已经成为了一种日常用品。而日本似乎十分热衷于研究不同类型的口罩,例如为了应对夏季的“冰镇口罩”和带微型电扇的口罩,还有为了女性美观研发的“小脸美口罩”。 8月4日,据媒体报道,日本一

关键字: 口罩 日本 智能 翻译 语言

研究表明,人在老年时学习第二语言也可以改善认知功能。 虽然我们大多数人都容易学会技术,但学习语言从未如此简单。

关键字: Android 语言 verbling

航科院民用无人机检验中心在湖北武汉对易瓦特科技股份公司的EWZ-S8八旋翼无人机进行了无人机系统安全能力二级围栏检验。本次检验耗时3个多小时。检验中心检验员针对EWZ-S8八旋翼无人机进行了无人

关键字: 无人机 语言

什么是51单片机?它有什么注意事项?编程也好设计也罢,都要有遵循的规则。可以发挥自己的创新但是要顾全大局,不能随意的编程。下面分享关于51单片机编程的一些规则,希望能帮到大家,避免大家四处碰壁。

关键字: 51单片机 编程 语言

1月15日,打着中科院计算所出品、完全自主开发旗号的国产编程语言“木兰”引发广泛关注,但很快被发现是基于Python语言套壳、换皮而来的产物。 面对质疑,中科院计算所编译实验室员工、“木兰”语言研发团

关键字: 中科院 国产 木兰 编程 语言 刘雷 计算所 重罚
关闭