一起来学cdecl

 

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 returning char
翻译: a是一个指针数组,数组成员指向返回 "函数" 指针的函数,(双引号中的函数的返回值是char)
 
(4) char *((*a[])())()
和上面的区别就不大了
cdecl> explain char *((*a[])())()
declare a as array of pointer to function returning function returning pointer to char
翻译: a是一个指针数组,数组成员指向返回 "函数" 指针的函数,(双引号中的函数的返回值是char型的指针)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值