хорошая практика макросъемки в с - PullRequest
2 голосов
/ 24 сентября 2011

как лучше использовать макрос и почему 1)

CHECK(foo());
#define CHECK(foo) do{                            \
                           UCHAR status = foo;    \
                           if(0 != status)        \
                              // do some stuff    \
                              return status;      \
                        }while(0)

или 2)

UCHAR status = foo();
CHECK(status);

#define CHECK(status) do{                            \
                           if(0 != status)        \
                              // do some stuff    \
                              return status;      \
                        }while(0)

отредактировано

спасибо всем вам, ребятаМногие люди говорят, что не рекомендуется использовать такой кусок кода, но у меня в коде много таких фрагментов (которые я не писал, а только изменял), что вы можете предложить?

Ответы [ 2 ]

1 голос
/ 24 сентября 2011

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

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

0 голосов
/ 24 сентября 2011

Вариант 1 проще в использовании, так как нет необходимости беспокоиться о множественных оценках foo().Вариант 1 также поддерживает область действия переменной status как можно меньше.Вариант 2 пропускает переменную состояния в область действия вызывающей стороны.

Вариант 3, который вообще не использует макрос, еще лучше!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...