2010-03-30 3 views

ответ

3

только отличается в коде дополнительная точка с запятой. , но скомпилированная сборка такая же.

6

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

5

Заявление, выполняемое циклом while, представляет собой составной оператор внутри фигурных скобок. Точка с запятой - это просто пустое заявление. Вы могли бы написать этот цикл как:

while ((R_SPI2SR & B_SPIF) != B_SPIF) 
    SERIAL_SERVICE_WDOG; 

поскольку Составной оператор только имеет один оператор внутри него, или как

while ((R_SPI2SR & B_SPIF) != B_SPIF) 
{ 
    SERIAL_SERVICE_WDOG;;;;;;;;;;;;;;; 
};;;;;;;;;;;;;; 

который, конечно, ужасный стиль.

Пустая инструкция используется, когда у вас есть цикл, который не нуждается в теле.

/* Throw away remaining characters up to the end of line. */ 
while ((c = getchar()) != '\n') 
    ; 

Вы хотите, чтобы следить за классическую ошибку окончания цикла преждевременно:

int i = 1; 
int j = 1; 
while (i < 10); /* The semicolon here ends the loop... */ 
    j *= i++;  /* ... so this statement is only executed once. */ 

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

Смежные вопросы