2013-05-11 11 views
0

Мой друг дал мне этот Arduino код:Что это за цикл?

int button; 

void setup(){ 
    pinMode(12, INPUT); 
} 

void loop(){ 
    for(button; button == HIGH; button == digitalRead(12)) { //This line 
     //Do something here 
    } 
} 

Линия комментировал с «эта линия» мне не ясна.

Я всегда видел for цикл, как:

for (init; condition; increment) 

Также используется по-разному, как:

for(int i=0; i<n; i++){} 
for(;;){} 

и так далее, но я никогда не видел что-то вроде кода Я получил от моего друга.

Он компилируется на Arduino IDE, так в чем смысл этого конкретного цикла for?

Другими словами, что это за цикл, и как это работает?

+0

для петель не должны увеличиваться, синтаксис больше похож на 'для (run_once_at_start; conditions_to_check_every_loop; actions_to_perform_every_loop)' Кроме того, заметим, что она сломана код, '==' не имеет побочных эффектов, и ничего не делается. Я думаю, что ваш друг означает '=' – GRAYgoose124

+0

@ GRAYgoose124. Я думаю, он просто имел в виду '==', поскольку он компилируется и работает правильно. – BackSlash

+0

Несомненно, он компилируется и работает правильно, как и множество «логических» ошибок. Он ничего не сделает, он сравнивает значение digitalRead на контакте 12 с кнопкой и ничего не делает с результатами. 'button == digitalRead (12)' может быть полностью опущен, и он даст те же результаты. На самом деле, я уверен, вы все равно оптимизировали его. – GRAYgoose124

ответ

3

Этот цикл:

for(button; button == HIGH; button == digitalRead(12)) 

эквивалентно:

button; // does nothing - should probably be `button = HIGH;` ? 
while (button == HIGH) // break out of loop when button != HIGH 
{ 
    //do something here 
    button == digitalRead(12); // comparison - should probably be assignment ? 
} 

Примечание: Я подозреваю, что весь цикл глючит и, вероятно, следует прочитать:

for (button = HIGH; button == HIGH; button = digitalRead(12)) 
    // do something here 
+0

«возможно» ничего не делает? Когда он может что-то сделать? – djechlin

+0

К сожалению, я думал, что эта кнопка может быть макросом или чем-то другим, но теперь я вижу, что она объявлена ​​как 'int button', поэтому да, она ничего не делает. –

+0

'digitalRead()' может иметь или не иметь побочный эффект. Это, скорее всего, есть. Это * вероятно * здесь, IMHO – wildplasser

2

Во-первых, давайте интерпретировать это буквально. Преобразование в то время как цикл, как:

button; // does nothing 
while(button == HIGH) { // clear 
    // do stuff 
    button == digitalRead(12); // same as digitalRead(12); 
} 

Этот код действительно должен быть отправляясь много IDE или компилятора предупреждений. Во всяком случае, мой ответ правильный, вот к чему он буквально обращается. Обратите внимание, что button == digitalRead(12) действителен, но ничего не делает с результатом сравнения.

Скорее всего, код неисправен. Одной из гипотез является == должно быть =.