0
我的代碼如下: int cread(int * xp) { return(xp?* xp:0); }如何使用條件數據傳輸創建函數?
使用gcc我得到沒有條件數據傳輸的彙編代碼,我知道這是因爲它可能試圖從空地址讀取。所以,如何通過修改原始代碼來使用條件數據傳輸來獲取彙編代碼?
我的代碼如下: int cread(int * xp) { return(xp?* xp:0); }如何使用條件數據傳輸創建函數?
使用gcc我得到沒有條件數據傳輸的彙編代碼,我知道這是因爲它可能試圖從空地址讀取。所以,如何通過修改原始代碼來使用條件數據傳輸來獲取彙編代碼?
然後解除引用空指針的可能性。確保指針在解除引用前有效。例如:
int cread(int *xp)
{
static const int zero = 0;
return *(xp ? xp : &zero);
}
我的編譯器生成以下代碼(其他人可能會發生變化):
movl 4(%esp), %eax
movl $zero.1723, %edx
testl %eax, %eax
cmove %edx, %eax
movl (%eax), %eax
ret
非常感謝您! – Zhao 2014-10-11 12:12:21