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