Похоже, что первая строка отменяет первое условие второго, но все же хорошей практикой является оставлять проверки на ненулевое значение перед разыменованием, если более ранний код когда-либо удаляется, или если код, который изменяет pos (устанавливает его вNULL) всегда размещается между этими разделами.(один существенный недостаток return
в середине функции здесь ...)
Кроме этого, не должно быть никакой разницы с любым оптимизирующим компилятором, но код может лучше передать идею: return blah
либо, если * pos - NULL, либо если флаги - FLAGS;несмотря на более раннее условие, которое выделяет pos == NULL, в этом месте логика выполнения может также позволить ему быть NULL и выполнять возврат, как описано, вместо пропуска этого места.*
Это все равно будет работать правильно, управление возвращается, если pos == NULL, только другой возврат.
Любое изменение в более позднем условии изменит поведение:
if (*pos && ((*pos)->flags == FLAGS))
return blah;
crash();