代码技巧

1. 数据交换

不借助第三方变量实现对两个数字的交换。

void swap( int *a,int *b )

{

*a ^= *b ^= *a ^= *b;// 两两取反

}

2.char[0]

内核中,常见char[0]结构体字段的声明。

struct MyData 

{

    int nLen;

    char data[0];// 不占空间

};

sizeof(MyData) = 4;

变长数组,可申请一块连续空间,防止内存碎片,嵌入式开发中比较常见。

运用:

struct MyData *p = (struct MyData *)malloc(sizeof(struct MyData) + strlen(str))

可通过 p->data 来操作这个str。

 3. 死循环

for ( char i=0; i<=0x7F; i++ ){ }

 经常会习惯性写出上述代码,上述代码会形成死循环。

 罪魁祸首就是i=0x7f这句,i=0x7f时,执行完循环后i=-128,条件为真,循环继续进行。

 i值从 0 - 127, -128 - 0, 0 - 127 周而复始变化。

// 方法一:取消i=0x7f临界条件
for( char i=0; i<0x7f; i++){ }

//  方法二:声明为无符号数,推荐
for( unsigned char i=0; i<=0x7f; i++ ){ }

猜你喜欢

转载自tcspecial.iteye.com/blog/2334520