C老鸟编程技巧总结 (1)
来源:互联网 发布:温度采集仪单片机 编辑:程序博客网 时间:2024/05/16 07:58
本文来自http://blog.csdn.net/lijun84 ,引用必须注明出处!
本文来自我实践中以及阅读优秀开源项目的技巧手法总结。更多是从设计和代码结构技巧上考虑,希望对大家提供C编程有所帮助。
1,开发跨平台的一种结构体实现 (说明代码提取自LCC编译器源码)
//定义跨平台的结构体.
typedefstruct binding {
char*name; //标识一个平台的名子.
Interface*ir; //跨平台的接口结构,一般声明需要跨平台的操作函数的指针和一些变量.
}Binding;
//可以先把每个平台的接口对象绑定好.
Bindingbinds[]{
//象alphaIR这些对象和它们中定义函数指针对应的函数实现可以定义在如alpha.c这样命名的文件中
"alpha/osf",&alphaIR,
"mips/irix",&mipsebIR,
"sparc/sun",&sparcIR
};
//下面使用起来就很方便了,无论是从命令行取平台名子动态绑定还是用宏来在编译时绑定.
如(动态绑定):for (j = 0; bindings[j].name && bindings[j].ir; j++)
//根据-target参数的值来确定平台
if(strcmp(&argv[i][8], bindings[j].name) == 0) {
IR= bindings[j].ir; //绑定到特定平台的接口
break;
}
2,巧用宏来减少代码量,使代码更美观 (说明代码提取自LCC编译器源码)
3,巧用联合体 (说明代码提取自LCC编译器源码)
4,用通用结构体头实现C的OO封装(说明代码提取自Ruby源码)
struct RBasic的设计是为了包含由所有对象结构体共享的一些重要信息的。struct RBasic的定义如下:
struct RBasic
struct RBasic {
unsigned long flags;
VALUE klass;
};
flags 是个多目的的标记,大多用以记录结构体类型(比如,structRObject)。类型标记命名为T_xxxx,可以使用宏 TYPE() 从 VALUE中获得。这是一个例子:
VALUE str;
str = rb_str_new(); /* 创建Ruby字符串(其结构体是RString) */
TYPE(str); /* 返回值是T_STRING */
这些T_xxxx 标记的名字直接与其对应的类型名相关,如T_STRING 表示 struct RString、 T_ARRAY 表示 struct RArray。
struct RBasic的另一个成员,klass,包含了这个对象归属的类。因为klass成员是VALUE类型, 它存储的是(一个指针指向)一个Ruby对象。简言之,它是一个类对象。
函数指针表和变量表实现成员函数和成员变量的封装:
struct RClass {
structRBasic basic;
structst_table *iv_tbl;
struct st_table *m_tbl;
VALUEsuper;
};
structst_table
是一个在ruby
中到处使用的hash表,但基本上,它就是一个将名字映射为对象的表。在m_tbl
中,持有这个类所拥有方法的名称(ID
)与方法实体本身之间的对应关系。
- C老鸟编程技巧总结 (1)
- C老鸟编程技巧总结 (2)
- C/C++编程技巧总结
- c语言编程中的一点小技巧(老司机专用)
- 老程序总结的开发小技巧
- 老程序总结的开发小技巧
- 老程序总结的开发小技巧
- 深入理解C#:编程技巧总结(一)
- 深入理解C#:编程技巧总结(二)
- 深入理解C#:编程技巧总结(一)
- 深入理解C#:编程技巧总结(二)
- 深入理解C#:编程技巧总结(二)
- 深入理解C#:编程技巧总结(一)
- vc编程技巧总结
- VC 编程技巧总结
- 编程小技巧总结
- Shell编程技巧总结
- android 编程技巧总结
- 针对百度,怎样做SEO
- android图片处理一
- 世界上最难弹奏的十首钢琴曲
- Linux同步拾遗
- 搭建Struts2的开发环境
- C老鸟编程技巧总结 (1)
- 目标跟踪小结
- “因为文件组primary已满,未能为数据库XX对象XX分配空间”问题的解决
- C语言处理BMP图片
- 别样的落寞
- 获取移动设备U盘 的盘符以及容量
- 【转载】常用 大数据量、海量数据处理 方法 / 算法总结
- 软件公司如何接项目
- tiny+指令流(中间代码)设计