Jak tymczasowo pozbyć się argumentu funkcji?

Dzisiaj wpadłem na pomysł jak można tymczasowo pozbyć się argumentu z funkcji, bez komentowania jej za pomocą /**/. Przykładowo, mamy wywołanie funkcji:

jakas_funkcja( argument1, argument2, argument3 );

Załóżmy, że argument drugi jest wskaźnikiem i chcemy go chwilowo ustawić na NULL bez usuwania samego argument2. Naturalnym byłoby zastosowanie komentarza, ale dzięki specyfikacji C++ można to zrobić jeszcze fajniej ^^

jakas_funkcja( argument1, (argument2,NULL), argument3 );

I o co w tym chodzi? 🙂 Otóż kiedy program dotrze do drugiego parametru funkcji, natrafi na wyrażenie (argument2, NULL). Niezależnie od tego jaki by nie był argument2 wynik takiego wyrażenia jest zawsze wynikiem ostatniego „pod-wyrażenia” – czyli w tym wypadku NULL. Dlatego też do funkcji zostanie przekazana wartość NULL. Później jeśli już chcemy przywrócić argument2 do łask – wystarczy wywalić „,NULL” i można zostawić samo „(argument2)” bo ten nawias już i tak nic nie zmienia, a w przyszłości możemy go znów wykorzystać do tego samego celu 😉

Niby nic, a czasem przydatne – zwłaszcza jeśli argument2 jest wywołaniem jakiejś funkcji i chcemy aby się ona wykonała, ale chwilowo nie chcemy przekazywać wyniku tej funkcji do jakas_funkcja().

Wpadłem na ten pomysł właściwie przed chwilą, ale to głównie dzięki mojemu profesorowi prowadzącemu wykład z C, który zwrócił mi uwagę, na fakt, że wartością całego wyrażenia – jeśli mamy kilka przecinków – jest zawsze to po ostatnim przecinku.

Podsumowując – nawet z 8-letnim doświadczeniem z C++ warto chodzić na wykłady z C 😉 (poza tym to świetna okazja, żeby sobie coś zakodzić przy okazji słuchając muzyki i od czasu do czasu wykładowcy ;P)

Reklamy

5 myśli nt. „Jak tymczasowo pozbyć się argumentu funkcji?

  1. Ty, to dobre jest! Masz u mnie plusa 🙂 Pokręcone ale ciekawe. Nigdy wcześniej czegoś takiego nie widziałem, chociaż operator przecinka znam.

  2. @Reg: ja tez nie widzialem, a moze sie przydac nawet czasem ^^
    @Kurak: z komentarzami jest czasem wiecej roboty, ale masz racje, czasem można się wkopać i potem szukać błędu którego nie ma 🙂

    Ale tak to bywa ze wszystkimi trickami 🙂

  3. Komentarz w środku wywołania od razu zwraca uwagę (nie tylko dlatego, że jest kolorowany inaczej), a takie wyrażenie nie. Tym niemniej to bardzo ciekawe zastosowanie przecinka 🙂

  4. W niektórych przypadkach ułatwia i przyspiesza edycję kodu, a jak coś nie będzie działać to i tak pierwszą, rzeczą jaką sprawdzam jest wywołanie funkcji i lista parametrów więc od razu można poznać (przypomnieć sobie) skąd się błąd wziął.

    Gorzej jeśli taki bug będzie w releasie biblioteki i później ktoś będzie z niej korzystał, a Tu klops 😉

    Tak czy inaczej, każdy używa co mu potrzeba ^^

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s