Preprocesor - zamiana for na while

0

Jak za pomocą preprocesora zamienić pętle for na while?

0

Przeczytać dokumentację na temat #define? Podpowiedź:

#define while for

spowoduje zamianę słowa while na słowo for.

0

Nie słów for na while, tylko całej pętli for na całą pętle while.

Wiem, że jest wzór na zamianę tych pętli, taki, że:
for(A;B;C)
{
D
}

jest równoważne z:

A;
while (B)
(D
C;
}

Tylko jak to pre procesorem zrobić?

0

Specjalistą od #define nie jestem ale mam wątpliwości czy w ogóle można to zrobić. Najbliższe które udało mi się napisać to:

#define for(a,b,c) a; while(b) c

co potrafi takie coś:

#define for(a,b,c) a; while(b) c

int main(){
    int i,j;
    for(i=0,i<10,i++);
    return 0;
}

Przerobić na:

int main(){
 int i,j;
 i=0; while(i<10) i++;
 return 0;
}
0

Chciałbym, aby to tak działało, też tak próbowałem, ale niestety nie działa.

0
#define for(a,b,c) {a; while(b) {c;}}
0

Ale żeby jeszcze ciało pętli jakoś działało... to chyba nie bardzo się da. A w ogóle to po co Ci coś takiego?

0

Potrzebuje by kod był optymalizowany na poziomie kompilacji i do tego potrzebna zamiana for na while.

to co podaliście nie działa niestety. Sama linijka się kompiluje, ale potem w pętli błędy wychodzą.

0

@KEDAR ale co niby ta optymalizacja ma dać? o_O Przecież gcc z for() i z while() generuje identyczny kod, więc po co kombinować?

0

Kod działa identycznie, ale while szybciej się wykonuje. Jedno obliczanie pętli mniej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0