【发布时间】:2011-09-10 01:12:39
【问题描述】:
我只是想知道这是否是 C89 程序的“好”代码。
obj_ptr = (obj*) (ptr1 || ptr2);
基本上它的作用(至少在我计算机上的 GCC 中)将 obj_ptr 设置为 ptr1 如果 ptr1 != NULL 则设置为 ptr2 否则。
我环顾四周,看不出这是否正确,但从 || 的事实来看运算符必须将指针转换为整数,然后我必须将它们转换回来,这是一种不好的风格。
如果这是不好的风格或不可移植的,是否有更好的(希望)同样简洁的解决方案?
编辑:我主要关心我编写的代码是否可移植并且不依赖于未定义的行为。
我可能找到了一种更好的方法,它是可移植的,我认为它是“好风格”(除非你不喜欢 if 语句中的赋值)。
if(!(obj_ptr = ptr1))
obj_ptr = ptr2;
【问题讨论】:
-
不要追求简洁。那是70年代。寻找清晰易懂的(阅读:可维护的)。
-
它不仅不便携,而且完全是错误的。
-
是的,这是错误的。我需要停止黑客攻击并编写一些好的代码。
标签: c pointers casting logical-operators