Мне просто интересно, является ли это "хорошим" кодом для программы на C89.
obj_ptr = (obj*) (ptr1 || ptr2);
По существу то, что он делает (по крайней мере, в GCC на моем компьютере), устанавливает obj_ptr как ptr1, если ptr1! =NULL и ptr2 в противном случае.
Я огляделся по сторонам и не могу понять, правильно ли это, но судя по тому, что ||Оператор должен преобразовать указатели в целые числа, а затем я должен привести их обратно - намек на плохой стиль.
Если это плохой стиль или непереносимый, и есть ли лучшее и (надеюсь) такое же краткое решение?
РЕДАКТИРОВАТЬ: Моя основная проблема в том, является ли написанный мною код переносимым и не зависит от неопределенного поведения.
Возможно, я нашел лучший способ, который переносим и который я считаю«хороший стиль» (если вы не любите присваивание в операторах if).
if(!(obj_ptr = ptr1))
obj_ptr = ptr2;