我的代码如下: int cread(int * xp) { return(xp?* xp:0); }
使用gcc我得到的汇编代码没有条件数据传输,我知道这是因为它可能会尝试从空地址读取。那么如何通过修改原始代码来使用条件数据传输来获取汇编代码呢?
答案 0 :(得分: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