一起来学cdecl

来源:互联网 发布:贵阳 大数据 编辑:程序博客网 时间:2024/04/29 22:06

 

cdecl 的一个非常强大的功能就是能够分析C语法中非常复杂的定义。

第一部分:用cdecl来学学const C语言的功能。

运行cdecl
(1)const char * i;
cdecl> explain const char * i
declare i as pointer to const char
翻译: 定义i为指针,指向const类型的char

(2) char *const  i;
cdecl> explain  char *const  i
declare i as const pointer to char
翻译: 定义iconst型的指针,指向char

(3)
那么有没有char const *i; 这样的用法呢?那我们就试试吧,
cdecl> explain  char const * i
syntax error
是否真的是语法错呢?那就得看看《The C Programming Language》了, A.8.6.1 Pointer Declarator 只有上面两种用法。于是用gcc试试,发现可以编译过去,和const char *i是一样,不知道是不是cdecl太严谨了呢,不过const *这种表示的确不好看。那const * char i; 呢?不过这就不用试了吧,*char 是个什么东西呀。


注意:网上有篇《水滴石穿C语言程序设计之正确使用const》其中有错误,比如const (char *) pContent; 这种定义的方法在cdecl和gcc 都报错。


第二部分: cdecl 学学函数指针。
(1) char (*a)()

cdecl> explain char (*a)()
declare a as pointer to function returning char
翻译: 定义a是一个函数指针,指向的函数返回char型。

(2) char (*a[])()   是什么?
cdecl> explain char (*a[])()
declare a as array of pointer to function returning char
翻译: a 是一个函数指针数组,数组成员指向的函数都是返回char型。

(3)char ((*a[])())() 又是什么???????
cdecl> explain char ((*a[])())()
declare a as array of pointer to function returning function returningchar
翻译: a是一个指针数组,数组成员指向返回 "函数" 指针的函数,(双引号中的函数的返回值是char)
 
(4) char *((*a[])())()
和上面的区别就不大了
cdecl> explain char *((*a[])())()
declare a as array of pointer to function returning function returning pointerto char
翻译: a是一个指针数组,数组成员指向返回 "函数" 指针的函数,(双引号中的函数的返回值是char型的指针)
 

原创粉丝点击