`
tcspecial
  • 浏览: 899004 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

代码技巧

阅读更多

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++ ){ }

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics