Wpis z mikrobloga

via Wykop Mobilny (Android)
  • 34
@TheMoonTheMoon: jedyne do czego można się przyczepić to:
main ma inny prototyp (dostaje jeszcze tablice argumentów)
Nie zwracasz inta (dostanie śmieci jako wynik działania programu, ale z drugiej strony program się nie kończy nigdy)
Jesteś ograniczony stosem niepotrzebnie, w pętli nie ma tego ograniczenia.
Ogólnie jako ciekawe rozwiązanie zadania mi się podoba (może oprócz olania warningow przy kompilacji).
@TheMoonTheMoon: Mam nadzieje że ten post to troll :D

1. Początkowa wartość tej zmiennej licznik zależy od argc więc program w ogóle nie spełnia założeń. Jak uruchomisz go przez jakieś ./program.exe ala ma kota to nie będzie liczyć od 1
2. getch i conio.h to rzeczy które są starsze od ciebie i cud że w ogóle znalazłeś kompilator który to wspiera
3. Użycie rekurencji zamiast prostej pętli sprawia, że program wywali
via Wykop Mobilny (Android)
  • 0
@KrzaQ2: jak byś zobaczył wyżej to już była ta dyskusja. Masz rację że jest to niezgodne ze standardem cpp, o czym napisał magisterwihaister. Praktyka jest taka że kompilator to przepuści jak wiele innych rzeczy. Mam nadzieję że jednak się zgodzisz że w praktyce nie jest tworzony wątek (do czego nawiązałem swoim komentarzem). (Edit) Co wpływa na zachowanie stosu na przyklad. Oczywiście zawsze chętnie poznam info o platformie gdzie main jest kompilowany
@mikuslaw: Celowo zacytowałem bez fragmentu o wątkach (a wpisu niżej z jakiegoś powodu nie zauważyłem, mea culpa). Z perspektywy języka kod nie jest poprawny i tyle, jeden kompilator przepuści, inny nie, inny w formie optymalizacji wywali takie wywołanie. Uważam, że słabe jest takie dyskutowanie o tym co jest tu i teraz - w przeszłości mogłeś mieć np. znaczący kod w if (!this) w kodzie klasy, albo mogłeś polegać na łamaniu aliasingu
via Wykop Mobilny (Android)
  • 0
@mikuslaw: jak czytam to wydaje się że głównym powodem może być to że skoro kompilator musi zapewnić że wszelkie statyczne obiekty muszą być utworzone przed wejściem w main to standard dodał to ograniczenie żeby zapewnić że żaden konstruktor wołany przed mainem nie zawoła maina. To dalej nie zmienia tego że w praktyce (niezgodnej ze standardem) wywołanie będzie takim samym wywołaniem jak każde inne.
via Wykop Mobilny (Android)
  • 2
@KrzaQ2: akurat do tej pory w implementacjach baremetal z którymi miałem do czynienia to "start script" był odpowiedzialny za kopiowanie kodu, init pamięci, wołanie konstruktorów statycznych i właśnie zawołanie maina jak każda inna funkcje (jeśli dobrze rozumiem o tym piszesz jako freestanding).
Dlatego chyba jedynym sensownym argumentem jest właśnie zapewnienie że konstruktory statyczne są już zawołane jak wchodzi do maina. Ale w takim układzie w main nie może być tej magii