Делают ли два приведенных ниже фрагмента кода одно и то же?
do { Delay_us(1); status = fetchStatus(); }while(!status);
Второй фрагмент ->
do { Delay_us(1); }while(status = fetchStatus(), !status);
что предпочтительнее?
Вы можете сделать:
do { Delay_us(1); } while( !fetchStatus() );
Таким образом, вам не нужно создавать локальную переменную, если вы не используете ее.
Да, они делают то же самое, но я бы предпочел следующее:
do { Delay_us(1); } while (!(status = fetchStatus()));
Поскольку все это объединено в одно утверждение, а не в два.
Они эквивалентны.Поскольку они эквивалентны, ни один не является предпочтительным.Тем не менее, некоторым людям может понравиться первый более эстетически, потому что он более знаком, однако.
Вы действительно собираетесь отложить до первой проверки статуса?
Они имеют одинаковый логический вывод.В каждом случае статус присваивается, а затем оценивается, но первый гораздо более читабелен.В общем случае не используйте запятую.
Как насчет:
for(; !fetchStatus(); Delay_us(1));
Я ни в коем случае не эксперт, но я верю, что мы попадаем в сферу оптимизации компилятора. Это действительно зависит от того, какой компилятор вы используете для генерации двоичного кода из этого кода. Один компилятор может взять код как ваш первый фрагмент и оптимизировать его в двоичный код, который эффективно выполняет то же, что и ваш второй фрагмент.