当前位置:  开发笔记 > 前端 > 正文

你怎么读C声明?

如何解决《你怎么读C声明?》经验,为你挑选了3个好方法。

我听说过一些方法,但都没有卡住.我个人试图避免C中的复杂类型,并尝试将它们分解为组件typedef.

我现在面临着从一个所谓的"三星级程序员"维护一些遗留代码的问题,而且我很难阅读一些***代码[] [].

你如何阅读复杂的C声明?



1> Eli Courtwri..:

本文解释了一个相对简单的7条规则,如果您发现自己需要或需要手动执行此操作,它将允许您阅读任何C声明:http://www.ericgiguere.com/articles/reading-c-declarations.html

    找到标识符.这是你的出发点.在一张纸上,写"声明标识符为".

    向右看.如果那里没有任何东西,或者右括号")",请转到第4步.

    您现在位于数组(左括号)或函数(左括号)描述符上.可能存在这些序列,以不匹配的右括号或声明符的结尾(分号或"="表示初始化)结束.对于每个这样的描述符,从左到右阅读:

    如果一个空数组"[]",写"数组"

    如果一个大小的数组,写"数组大小"

    如果函数"()",写"函数返回"

    停在不匹配的括号或声明符的末尾,以先到者为准.

    返回起始位置并向左看.如果那里什么也没有,或者左括号"(",转到第6步.

    您现在位于指针描述符"*"上.左边可能有一个序列,以左括号"("或声明符的开头结束.从右到左阅读,每个指针描述符写"指向".停在不匹配的括号或声明者的开头,以先到者为准.

    此时,您有一个带括号的表达式或完整的声明符.如果您有带括号的表达式,请将其视为新的起点并返回步骤2.

    记下类型说明符.停止.

如果您对某个工具没问题,那么我建议使用该程序cdecl:http://gd.tuwien.ac.at/linuxcommand.org/man_pages/cdecl1.html



2> sundar - Rei..:

我通常使用有时被称为"右手顺时针规则"的东西.它是这样的:

从标识符开始.

转到它的右边.

然后顺时针方向移动到左侧.

顺时针移动并向右移动.

只要声明尚未完全解析,请执行此操作.

还有一个额外的元规则需要注意:

如果有括号,请在移出前完成每个级别的括号.

在这里,"前进"和"移动"某处意味着在那里阅读符号.规则是:

* - 指向

() - 功能返回

(int, int) - 功能采取两个整数并返回

int,char等- int,char等等.

[] - 数组

[10] - 十个数组

等等

因此,例如,int* (*xyz[10])(int*, char)读作:

xyz是一个

一排十

指针

函数接受一个int*和一个char并返回

一个int*



3> Dark Shikari..:

一个字:cdecl

Damnit,被打15秒!

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有