Either way is correct.
Are we missing something?
The first form evaluates both (b->ttype != TYPE_void) and b->tkey, both
of which result in either 0 or 1. The single & does a bit-wise AND on
those two values and results in 1 if both sides evaluated to 1.
In the second form, if first part evaluates to 0, b->tkey is not
evaluated, and if the first part evaluates to 1, the second part is also
evaluated. The restult, again, is only 1 if both sides evaluate to 1.
Wait, bitwse AND (&) is not shortcut, If first part evaluates to 0
*b->key is stiil evaluated.*
It is never good to mix relational operators with bitwise operators.