сделать пока условие цикла в c - PullRequest
1 голос
/ 19 января 2012

Делают ли два приведенных ниже фрагмента кода одно и то же?

do
{
    Delay_us(1);
    status = fetchStatus();
}while(!status);

Второй фрагмент ->

do
{
    Delay_us(1);
}while(status = fetchStatus(), !status);

что предпочтительнее?

Ответы [ 6 ]

7 голосов
/ 19 января 2012

Вы можете сделать:

do
{
    Delay_us(1);
} while( !fetchStatus() );

Таким образом, вам не нужно создавать локальную переменную, если вы не используете ее.

4 голосов
/ 19 января 2012

Да, они делают то же самое, но я бы предпочел следующее:

do {
    Delay_us(1);
} while (!(status = fetchStatus()));

Поскольку все это объединено в одно утверждение, а не в два.

1 голос
/ 19 января 2012

Они эквивалентны.Поскольку они эквивалентны, ни один не является предпочтительным.Тем не менее, некоторым людям может понравиться первый более эстетически, потому что он более знаком, однако.

Вы действительно собираетесь отложить до первой проверки статуса?

1 голос
/ 19 января 2012

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

0 голосов
/ 20 января 2012

Как насчет:

for(; !fetchStatus(); Delay_us(1));
0 голосов
/ 19 января 2012

Я ни в коем случае не эксперт, но я верю, что мы попадаем в сферу оптимизации компилятора. Это действительно зависит от того, какой компилятор вы используете для генерации двоичного кода из этого кода. Один компилятор может взять код как ваш первый фрагмент и оптимизировать его в двоичный код, который эффективно выполняет то же, что и ваш второй фрагмент.

...