改善C++ 程序的150个建议学习之建议8:拒绝晦涩难懂的函数指针
来源:互联网 发布:mac照片排序 编辑:程序博客网 时间:2024/06/10 19:10
建议8:拒绝晦涩难懂的函数指针
在C/C++程序中,数据指针是最直接也是最常用的,理解起来也相对简单容易,但是函数指针理解起来却并不轻松。函数指针在运行时的动态调用中应用广泛,是一种常见而有效的手段。但是,如果不注重一定的使用技巧,函数指针也会变得晦涩难懂。告诉我下面定义的含义是什么?
void (*p[10]) (void (*)());
如此繁琐的语法定义几乎难以辨认,这与我们提倡的可读性背道而驰了。这样的函数指针之所以让程序员发愁,最主要的原因是它的括号太多了,往往会让程序员陷在括号堆中理不清头绪。下面一层一层地来分析吧。第一个括号中的*p[10]是一个指针数组,数组中的指针指向的是一些函数,这些函数参数为void (*)(),返回值为空;参数部分的void (*)()是一个无参数、返回值为空的函数指针。分析这样的代码简直是一种折磨。如何有效地提高函数指针定义的可读性呢?那就是使
用typedef。typedef 方法可以有效地减少括号的数量,可以通过typedef来合理地简化这些声明,理清层次,所以它的使用倍受推荐。以上面的定义为例。首先,声明一个无参数、返回空的函数指针的typedef,如下所示:
typedef void (*pfv)();
接下来,声明另一个typedef,一个指向参数为pfv且返回为空的函数指针:
typedef void (*pFun_taking_pfv) (pfv);
现在,再去声明一个含有10个这样指针的数组就变得轻而易举了,而且可读性有了很
大的提升:
在C/C++程序中,数据指针是最直接也是最常用的,理解起来也相对简单容易,但是函数指针理解起来却并不轻松。函数指针在运行时的动态调用中应用广泛,是一种常见而有效的手段。但是,如果不注重一定的使用技巧,函数指针也会变得晦涩难懂。告诉我下面定义的含义是什么?
void (*p[10]) (void (*)());
如此繁琐的语法定义几乎难以辨认,这与我们提倡的可读性背道而驰了。这样的函数指针之所以让程序员发愁,最主要的原因是它的括号太多了,往往会让程序员陷在括号堆中理不清头绪。下面一层一层地来分析吧。第一个括号中的*p[10]是一个指针数组,数组中的指针指向的是一些函数,这些函数参数为void (*)(),返回值为空;参数部分的void (*)()是一个无参数、返回值为空的函数指针。分析这样的代码简直是一种折磨。如何有效地提高函数指针定义的可读性呢?那就是使
用typedef。typedef 方法可以有效地减少括号的数量,可以通过typedef来合理地简化这些声明,理清层次,所以它的使用倍受推荐。以上面的定义为例。首先,声明一个无参数、返回空的函数指针的typedef,如下所示:
typedef void (*pfv)();
接下来,声明另一个typedef,一个指向参数为pfv且返回为空的函数指针:
typedef void (*pFun_taking_pfv) (pfv);
现在,再去声明一个含有10个这样指针的数组就变得轻而易举了,而且可读性有了很
大的提升:
pFun_taking_pfv p[10]; /*等同于void (*p[10]) (void (*)());*/
- 改善C++ 程序的150个建议学习之建议8:拒绝晦涩难懂的函数指针
- 改善C++ 程序的150个建议学习之建议26:用引用代替指针
- 改善C++ 程序的150个建议学习之建议5:不要忘记指针变量的初始化
- 改善C++ 程序的150个建议学习之建议34:用智能指针管理通过new创建的对象
- 改善C++ 程序的150个建议学习之建议0:不要让main函数返回void
- 改善C++ 程序的150个建议学习之建议20:使用memcpy()系列函数时要足够小心
- 改善C++ 程序的150个建议学习之建议20:使用memcpy()系列函数时要足够小心
- 改善C++ 程序的150个建议学习之建议19:明白在C++中如何使用C
- 改善C++ 程序的150个建议学习之建议27:区分内存分配的方式
- 改善C++ 程序的150个建议学习之建议31:了解new_handler的所作所为
- 改善C++ 程序的150个建议学习之建议7:时刻提防内存溢出
- 改善C++ 程序的150个建议学习之建议 9:防止重复包含头文件
- 改善C++ 程序的150个建议学习之建议11:将强制转型减到最少
- 改善C++ 程序的150个建议学习之建议12:优先使用前缀操作符
- 改善C++ 程序的150个建议学习之建议14:小心typedef使用中的陷阱
- 改善C++ 程序的150个建议学习之建议15:尽量不要使用可变参数
- 改善C++ 程序的150个建议学习之建议16:慎用goto
- 改善C++ 程序的150个建议学习之建议18:正确区分void与void*
- 正则表达式 中文
- 程序员编程艺术第三十四~三十五章:格子取数问题,完美洗牌算法
- proc_dir_entry结构说明
- android studio的安装
- 腾讯2012 笔试题-----A、B两人玩猜字游戏
- 改善C++ 程序的150个建议学习之建议8:拒绝晦涩难懂的函数指针
- 开源ocr库
- iOS 常用的三种动画表现效果
- SQLite学习实例, 日记本
- MonkeyRunner之手机屏幕截图的比对
- Visualize your shell history
- 用recommenderlab做电影推荐
- VBA 从一个excel读取特定行,列到指定excel
- Arrays类操作数组