Am 31.07.2011 11:47, schrieb Don: > dennis luehring wrote: >> Am 29.07.2011 22:02, schrieb Walter Bright: >>> Here's another one: >>> >>> T* p; >>> ... >>> if (A) >>> p = &t; >>> ... >>> if (B) >>> ... *p ... >>> >>> B is true if and only if A is true. B can even be the same expression as >>> A, such as a->b->c. Clang complains on the *p that p is "uninitialized". >>> Ok, so I rewrite as: >>> >>> T* p = NULL; >>> ... >>> if (A) >>> p = &t; >>> ... >>> if (B) >>> ... *p ... >>> >>> but now clang says I'm dereferencing a NULL pointer. At this point, I'm >>> faced with some significant trial-and-error refactoring to get rid of >>> the message. >>> >>> At what point does this cease to be fixing "bugs" and become "contort to >>> fit clang's quirks"? >> >> but your code does not reflect your "B is true if and only if A is >> true." statement > > The example I posted was clearer.
but i think clang was right with Walters code - i do not understand why he splits up the A and B conditional block into spereated ones when B does not work if A wasn't true before... makes it sense (in exactly this case) to write the code like he does?
