eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingSkładnia pętli (ogólnie i filozoficznie)Składnia pętli (ogólnie i filozoficznie)
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!newsfeed2.atman.pl!newsfe
    ed.atman.pl!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.new
    s.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
    From: "slawek" <s...@h...pl>
    Newsgroups: pl.comp.programming
    Subject: Składnia pętli (ogólnie i filozoficznie)
    Date: Sat, 17 Mar 2012 13:01:02 +0100
    MIME-Version: 1.0
    Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=original
    Content-Transfer-Encoding: 8bit
    X-Priority: 3
    X-MSMail-Priority: Normal
    Importance: Normal
    X-Newsreader: Microsoft Windows Live Mail 14.0.8117.416
    X-MimeOLE: Produced By Microsoft MimeOLE V14.0.8117.416
    Lines: 73
    Message-ID: <4f647cff$0$1273$65785112@news.neostrada.pl>
    Organization: Telekomunikacja Polska
    NNTP-Posting-Host: 62.69.202.124
    X-Trace: 1331985663 unt-rea-a-02.news.neostrada.pl 1273 62.69.202.124:63551
    X-Complaints-To: a...@n...neostrada.pl
    Xref: news-archive.icm.edu.pl pl.comp.programming:196118
    [ ukryj nagłówki ]

    Czy jest jakiś ładny sposób zapisu if-wewnątrz-for (ew. innych pętli)
    takich, że jest GWARANTOWANE przeniesienie if przed for w wyniku kompilacji,
    tak aby test if wykonywał się tylko jeden raz - a nie np. 10 milionów razy -
    i to bez sięgania po optymalizację?

    Jeżeli jest coś takiego for{ if } -- czyli instrukcja warunkowa wewnątrz
    pętli, np.:

    for (i = 0; i < 10; i++)
    if(x > y)
    {
    ...a...
    ...b1...
    ...c...
    ...d...
    ...e1...
    ...f...
    }
    else
    {
    ...a...
    ...b2...
    ...c...
    ...d...
    ...e2...
    ...f...
    }

    Oczywiście kumaty kompilator (x i y są ustalone z zewnątrz) powinien to
    sobie zoptymalizować do

    if
    {
    for
    for
    }

    Ale jak to zapisać bez potrzeby odwoływania się do mądrości kompilatora i
    bez rozwlekania jak niżej?

    if(a > b)
    for (i = 0; i < 10; i++)
    {
    ...a...
    ...b1...
    ...c...
    ...d...
    ...e1...
    ...f...
    }
    else
    for (i = 0; i < 10; i++)
    {
    ...a...
    ...b2...
    ...c...
    ...d...
    ...e2...
    ...f...
    }

    W kodzie źródłowym niepotrzebne są dublowane linie ...a... ...c... ...d...
    ...f..., co jest nieprzyjemne jeżeli jest ich za mało aby robić z nich
    procedurę (i nie chcemy mieć narzutów na call/ret - no, ale to też powinien
    zoptymalizować kompilator) - a jednocześnie MUSZĄ one być dokładnie takie
    same (i np. poprawka w jednym miejscu pociąga za sobą poprawianie w tuzinie
    podobnych.






Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: