我只是想知道这是否是 C89 程序的“好”代码。
obj_ptr = (obj*) (ptr1 || ptr2);
本质上,如果 ptr1 != NULL 和 ptr2,它的作用(至少在我的计算机上的 GCC 中)是将 obj_ptr 设置为 ptr1。
我环顾四周,看不出这是否合适,但从 || 的事实来看运算符必须将指针转换为整数,然后我必须将它们转换回去,这暗示了不良风格。
如果这是糟糕的风格或不可移植,是否有更好且(希望)同样简洁的解决方案?
编辑:我主要关心的是我编写的代码是否可移植并且不依赖于未定义的行为。
我可能找到了一种更好的方法,它是可移植的,而且我认为它是“好的风格”(除非你不喜欢 if 语句中的赋值)。
if(!(obj_ptr = ptr1))
obj_ptr = ptr2;
最佳答案
不,如果 ptr1
不为 NULL 或者 ptr2
为 NULL,它所做的是将 obj_ptr
设置为 1
不为 NULL,否则为 0
。您需要使用三元运算符:
obj_ptr = ptr1 ? ptr1 : ptr2;
关于C 指针和 ||运营商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7368991/