解读C的声明的最好方法是用英语来阅读,道理很简单,因为C语言是美国人发明的。
为了把问题变得更简单,在这里暂不考虑const和volatile。接下来遵循以下步骤来解释C的声明。
- 首先着眼于标识符(变量名或者函数名)。
- 从距离标识符最近的地方开始,依照优先顺序解释派生类型(指针、数组、和函数)。优先顺序说明如下:
- 用于整理声明内容的括弧。
- 用于表示数组的[],用于表示函数的()。
- 用于表示指针的*。
- 解释完成完成派生类型,使用“of”、“to”、“returning”将它们连接起来。
- 最后,追加数据类型修饰符(在左边,int,double等)。
- 英语不好的人,可以倒序用中文解释。
数组元素个数和函数的参数属于类型的一部分。应该将它们作为附属类型的属性进行解释。
比如:int (* func_p)(double);
1.首先着眼于标识符。 int (* func_p)(double); 英语的表达为 func_p is
2.因为存在括号,这里着眼于*。 int (* func_p)(double); 英语的表达为func_p is pointer to
3.解释用于函数的(),参数是double。int (* func_p)(double);
英语的表达为:func_p is pointer to function(double) returnning
4.最后解释数据类型修饰符int。int (* func_p)(double);
英语的表达为:func_p is pointer to function(double) returnning int。
5.最后翻译成中文:func_p是指向返回int的函数的指针。
根据这样的步骤,可以解释任何一个声明,比如更为复杂的:int atexit(void (*func)(void));
英语的表达为:atexit is function (func is pointer to function(void) returnning to void) returnning int.
翻译成中文为:atexit 是返回int的函数的(参数是,指向返回void没有参数的函数指针)
时间: 2024-08-01 22:22:57