Я бы сказал, первый, так как он заботится о том, чтобы избежать многократного вычисления foo
, и тому, кто его использует, не нужно помнить, чтобы создать дополнительную переменную.
Тем не менее, лично яМне не нравятся макросы, которые так изменяют поток выполнения: программист, впервые увидевший кодовую базу, может легко пропустить точку возврата функции.