C声明的基本优先级规则
C的声明有时候很复杂,不了解规则的人可能会对复杂的C声明极为反感,但是如果了解了C声明的基本优先级规则。
那么弄清楚C声明就是易如反掌的事情了。
C声明的规则如下:
A: 声明从它的名字开始读取,然后按照优先级顺序依次读取。
B: 优先级从高到低依次是:
B.1 声明中被括号括起来的那部分
B.2 后缀操作符:
括号()表示这是一个函数,而方括号[]表示这是一个数组.
B.3 前缀操作符:星号*表示 "指向...的指针".
C: 如果const和(或)volatile关键字的后面紧跟类型说明符(如int,long等 ),那么它作用于类型说明符.在其他情况下,
const和(或)volatile关键字作用于它左边紧邻的指针星号.
如: linux中的signal()声明如下:
void (*signal(int sig,void (*func)(int))) (int);
根据规则得出这个声明的意思:signal是一个函数,它返回一个函数指针,而这个指针所指向的函数接受一个int参数并返回void.其中我们没有介绍signal的参数,它的参数有两个
一个是int型的sig,另一个参数void (*func)(int),这个参数的意思是:它表示func是一个指针,它指向一个函数,而这个函数有一个int型 的参数,并且返回值是void.
这样我们根据基本的规则就可以把一个复杂的函数声明拆开来分析,最终完全理解它的意思.其实很简单.只是看起来有一点复杂而已.
那么弄清楚C声明就是易如反掌的事情了。
C声明的规则如下:
A: 声明从它的名字开始读取,然后按照优先级顺序依次读取。
B: 优先级从高到低依次是:
B.1 声明中被括号括起来的那部分
B.2 后缀操作符:
括号()表示这是一个函数,而方括号[]表示这是一个数组.
B.3 前缀操作符:星号*表示 "指向...的指针".
C: 如果const和(或)volatile关键字的后面紧跟类型说明符(如int,long等 ),那么它作用于类型说明符.在其他情况下,
const和(或)volatile关键字作用于它左边紧邻的指针星号.
如: linux中的signal()声明如下:
void (*signal(int sig,void (*func)(int))) (int);
根据规则得出这个声明的意思:signal是一个函数,它返回一个函数指针,而这个指针所指向的函数接受一个int参数并返回void.其中我们没有介绍signal的参数,它的参数有两个
一个是int型的sig,另一个参数void (*func)(int),这个参数的意思是:它表示func是一个指针,它指向一个函数,而这个函数有一个int型 的参数,并且返回值是void.
这样我们根据基本的规则就可以把一个复杂的函数声明拆开来分析,最终完全理解它的意思.其实很简单.只是看起来有一点复杂而已.