[PL] FAQ: C, for, syntax error (last update: 2012-12-13, created: 2012-12-12) back to the list ↑
[FAQ - pytania (które dostaje via e-mail/IRC/jabber/etc, oraz na które natrafiam na forach) + moje odpowiedzi]

Kod, który otrzymałem od znajomego, z pytaniem typu "co tu jest nie tak?":

for(unsigned short int spaces = cnt, unsigned short int j = 1; spaces > 0, j <= signs; spaces--, j++)
Problemy są dwa:

1. W C/C++ nie podaje się dwóch typów przy inicjalizacji (a w zasadzie tworzeniu) nowych zmiennych w pętli for. A konkretniej, jeśli oba typy mają być takie same, to wystarczy podać typ na początku; a jeśli mają być różne, to (niestety) trzeba jedną ze zmiennych zadeklarować przed pętlą. Np.:

float f = 0.0f; /* Inny typ, a więc przed pętlą. */
for(int a = 1, b = 4; a < 1; a++, b++, f += 1.23f) {
  /* Jakiś kod. */
}

2. Jeśli chodzi o warunek, to konstrukcja a > 0, b < 0 nie do końca zrobi to co autor prawdopodobnie chciał osiągnąć. W językach C i C++ można co prawda zapisywać wyrażenia po przecinku, ale końcową (zwracaną) wartością takiej serii wyrażeń będzie wartość zwrócona przez ostatni element. Przykładowo:

int a = (1, 2, 3, 4);
/* Zmienna "a" będzie zawierać wartość 4. */

Zazwyczaj jeśli podaje się dwa warunki, to chce się, aby oba były spełnione - i wtedy używamy operatora && :)
Ewentualnie, przynajmniej jeden ma być spełniony - wtedy w grę wchodzi oczywiście operator ||.

Na koniec dodam jeszcze, że pomimo tego, że z całej serii wyrażeń oddzielonych przecinkami, zostanie zwrócona wartość jedynie ostatniego, to i tak każde wyrażenie w serii będzie ewaluowane (wykonane). Czyli w przypadku a(), b(), c(), każda z tych funkcji się wykona, dokładnie w kolejności w której są napisane (ponieważ operator comma jest punktem sekwencyjnym).
【 design & art by Xa / Gynvael Coldwind 】 【 logo font (birdman regular) by utopiafonts / Dale Harris 】