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

    技术2022-05-13  28

     

    本文来自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)