2014-10-11 61 views
0

我的代碼如下: int cread(int * xp) { return(xp?* xp:0); }如何使用條件數據傳輸創建函數?

使用gcc我得到沒有條件數據傳輸的彙編代碼,我知道這是因爲它可能試圖從空地址讀取。所以,如何通過修改原始代碼來使用條件數據傳輸來獲取彙編代碼?

回答

1

然後解除引用空指針的可能性。確保指針在解除引用前有效。例如:

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 
+0

非常感謝您! – Zhao 2014-10-11 12:12:21