关闭

C老鸟编程技巧总结 (2)

2282人阅读 评论(2) 收藏 举报

 

本文来自http://blog.csdn.net/lijun84 ,引用必须注明出处!

 

5 ,复杂指针的声明


 

规则总结:

1) 去掉变量名就类型 , 去掉一个 *, 就是指向内存单元的类型 .

2) 强调什么将名子和强调的东东括最里层 , 再将其次强调的东西括外面一层 , 最后强调的括最外层 , 类型最后加在外面 :

: int (*i)[2]; 指向 int ()[2] 的指针 ( 强调指针 )

       Int *(i[2]); 类型为 int *() 的数组 ( 强调数组 )

       Void (*pf)(); 指向 void ()() 的函数指针 .

Void (*(pf[2]))();  函数类型为 void ()() 的指针数组 ( 最强调数组 , 所以先括数组 , 其次强调指针 , 所以将它括在外面一层 .

Void (*((*pf)[2]))(); 指向上个函数指针数组的指针 ,( 最强调指针 , 所以将变量明和指针括在最里层 , 其次强调数组 , 所以括在上一层 , 最后又强调指针 , 所以将其括在最外层 .)

 

 

 

 

6. 模拟 UCOS 中的 TASK 切换和邮箱机制 (由于 UCOS 代码比较复杂,自己实现了个模拟的,为了方便所以栈还是弄乱了!)

#define T(a,b) t##a(){ /

              while(1){ /

                     printf(gM(a)); /

                     sM(#b"/n",b); /

                     mS(); /

              } /

       }

 

unsigned int ip=0;

char mb[2][3];

 

char*gM(int p){

       return (mb[p-1]);

}

 

sM(char*m,int p){

       strcpy(mb[p-1],m);

}

 

mS(){

       Sleep(0xFF);

       _asm mov eax,ip

       _asm xchg eax,[ebp+4]

       _asm mov ip,eax

}

 

T(1,2)

T(2,1)

 

main(){

       ip=&t2;

       t1();

}

 

 

7, 泛型宏 (说明代码提取自 Linux 源码)

#define min(x, y) ({                           /

       typeof(x) _min1 = (x);                 /

       typeof(y) _min2 = (y);                 /

       (void) (&_min1 == &_min2);             /

       _min1 < _min2 ? _min1 : _min2; })

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:148686次
    • 积分:2155
    • 等级:
    • 排名:第18253名
    • 原创:43篇
    • 转载:29篇
    • 译文:6篇
    • 评论:109条
    最新评论
    其它