摘要:
在學校老師一定都會教void是無型態的返回值例如void swap(int *a, int *b){ int temp = *a; *a = *b; *b = temp;}這樣的函數結束之後不必返回任何數值就在函數名稱前面加上voidvoid 既然是無型態那void *就是無型態的指標了意思是可指向任何類型的指標有點難想像因為我們習慣把void當成只有在無返回值時要用的但是也可以當作無型態的指標也就是可以指向任何型態例如:void *a;int *b;*b = 10;a = b;printf("a: %d \n", *(int *)a);a = b 的時候 a 還是一個無型 阅读全文
摘要:
在 x86 上,regparm 属性会传递一个数值给编译器,这个数值会告诉编译器要用多少个寄存器来传递函数参数(EAX, EDX 或 ECX,最多 3 个寄存器),通常情况下函数是用堆栈来传递参数的。如果参数比较多,那么其余的参数仍然通过堆栈来传递。比如我们指定 __attribute__((regparm(0))) ,则表示不用寄存器来传递参数,所有参数都通过堆栈来传递;如果我们指定 __attribute__((regparm(3))),那么就是说会用 3 个寄存器来传递参数(EAX, EDX, ECX),其余的参数通过堆栈来传递。下面先看不用寄存器来传递参数的情况: 1 #include 阅读全文