个人Blog: hhktony.com
全部博文(553)
分类: LINUX
2012-02-15 00:07:44
一:cdecl 的一个非常强大的功能就是能够分析C语法中非常复杂的定义。
1:用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
翻译: 定义i为const型的指针,指向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 是个什么东西呀。
2: 用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 functiHon 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型的指针)。
二、cflow
clow hello.c //显示函数的调用关系
三、splint //代码检查工具