Не понимаю этот синтаксис - PullRequest
       12

Не понимаю этот синтаксис

2 голосов
/ 16 февраля 2010

Учитывая этот цикл, почему в конце стоит точка с запятой?

for(s = string; *s == ' '; s++)
    ;

спасибо

edit *, так что возможно ли отменить эту процедуру, чтобы она началась в концестрока и проверяет пробел и уменьшается до тех пор, пока не найдет символ?

Ответы [ 7 ]

6 голосов
/ 16 февраля 2010

Это пустое утверждение, которое в C не используется, как если бы вы сказали:

for(s = string; *s == ' '; s++)
{
    // do nothing
}

Вы используете это, когда все можно сделать в самой конструкции for( ... ) - грамматика C требует наличия контролируемого оператора, но для этого нет ничего общего.

3 голосов
/ 16 февраля 2010

Точка с запятой делает пустой цикл в цикле. Этот цикл ищет первый непустой char в string.

3 голосов
/ 16 февраля 2010

Точка с запятой означает, что внутри цикла ничего не делается. В вашем коде цикл просто зацикливается, пока символ в строке не станет пробелом. То есть после этой строки s указывает на первый символ в строке, который не является пробелом.

1 голос
/ 16 февраля 2010

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

 for(s = string; *s == ' ';)
     s++;

Или используя цикл while:

 s = string;
 while(*s == ' ')
     s++;

Но я думаю, что первый подход с пустым телом более "с-идиоматичен" (и труднее читать).

1 голос
/ 16 февраля 2010

Потому что в C (и других) для грамматики это: для (init; условие; шаг) корпус

Где body может быть замыканием (блок кода в {}), но body также может быть пустым;

0 голосов
/ 16 февраля 2010

В качестве "тела" цикла for должен быть оператор или блок. Это то, что выполняется каждый раз в цикле (пока s все еще указывает на пробел).

Сама точка с запятой - это оператор empty , то есть в теле цикла ничего не происходит, только s++ в строке цикла for.

0 голосов
/ 16 февраля 2010

Это заставляет цикл ничего не делать. Все, что происходит, это то, что указатель продвинут.

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