Aktywne Wpisy
![](https://wykop.pl/cdn/c0834752/69dcb0b73589885c5bbde7f7855c63b3426dd69ea2e85b63b34d4721f04e4feb,q60.jpg)
SzymonXes +324
No więc prawdą jest, że wczoraj popiłem. Co prawda nie z Olką, tylko ze znajomym. Trzeźwiałem w swoim łóżku. Kluczowa usługa w firmie się wywaliła o 19. W umowie (o pracę) mam podane dni i godziny 8-16, poniedziałek - piątek, nic o nadzwyczajnych sytuacjach. Ale team leaderka, której od dawna nie traktuję poważnie, zawsze musi się zfajdać. Ciekawe za którym razem dotrze do niej, że do mnie jednak po godzinach i w
![](https://wykop.pl/cdn/c3201142/62921d83321bce5b9505389b12244aaf1c4303ea6be02b30cc9153d1084760a5,w150.jpg?author=SzymonXes&auth=dee1196a174d94381a4ca01a46149f12)
![](https://wykop.pl/cdn/c0834752/0458544362b700cd954ef0b49d2de360ac5b1f82cc796b4206e983afc21ee751,q60.jpg)
mango2018 +82
90% społeczeństwa przed wojną nawet nie wiedziała o tym co działo się na Wołyniu.
A teraz #!$%@? wielcy husarscy 19 letni obrońcy, którzy potracili rodziny na Wołyniu,
Taka prawda, zanim ruscy zaczęli drążyć temat, to żaden drący tu mordę WOŁYŃ, WOŁYŃ Sebastian, nawet nie wiedział, gdzie ów Wołyń jest.
Jestem przekonany, że nawet teraz jakbym poprosił o wskazanie na mapie, to połowa #!$%@? by wiedziała gdzie to w ogóle jest.
Ale hurrr,
A teraz #!$%@? wielcy husarscy 19 letni obrońcy, którzy potracili rodziny na Wołyniu,
Taka prawda, zanim ruscy zaczęli drążyć temat, to żaden drący tu mordę WOŁYŃ, WOŁYŃ Sebastian, nawet nie wiedział, gdzie ów Wołyń jest.
Jestem przekonany, że nawet teraz jakbym poprosił o wskazanie na mapie, to połowa #!$%@? by wiedziała gdzie to w ogóle jest.
Ale hurrr,
Od przedszkola uznawałem C za język użyteczny na równi z brainfuckiem czy lolcodem. Konieczność oglądania plików, których nazwy zakończone są sufiksem ".c" zawsze wywołuje u mnie zimne poty i senne koszmary przez wiele kolejnych nocy. Niestety czasem jednak zdarza się, że to ja wylosuję najkrótszą zapałkę i muszę zaglądać w niezbadane czeluście sterowników pisanych przez hindusów. Kontakty z C zawsze są dla mnie pouczające i o tym dziś chciałem napisać.
konkrety
W języku C, w przeciwieństwie do C++ (który trzeba szanować!) deklaracja funkcji nie jest równoznaczna z jej prototypem, co może prowadzić do bardzo nieprzyjemnych konsekwencji. Zamiast jednak opowiadać dalej, zaprezentuję przykład (w spojlerze bo monospace daje).
static int fun();
int main(int argc, char ** argv)
{
int a=fun(10.0);
printf("%d\n", a);
return 0;
}
int fun( char *arg1, int *arg2 )
{
return *arg2;
}
O dziwo takie coś kompiluje się bez zająknięcia (do momentu jak nie damy aby brak prototypów rzucał warnami. Rezultaty działania proszę sobie na własną odpowiedzialność sprawdzić.
zakończenie
Krótko dlaczego tak jest - deklaracja sprawia, że cała rodzina funkcji, o nazwie fun będzie dla nas dostępna. Korzystamy sobie z niej więc do woli w mainie. Dopiero potem podając definicję podajemy prototyp - niby nie pasuje do tego co w mainie zostało wywołane, no ale cóż, już troszkę za późno. Drugi argument, zwracany przez funkcję nigdy nie został przekazany, więc pojawią się śmieci.
#programowanie #cpp #c99
@badasq: No chyba sobie żartujesz. Jest dokładnie na odwrót.
a C to zuo, tylko c++
(...)
, czyli dowolną liczbę argumentów dowolnego typu. Jeśli funkcja ma nieprzyjmować argumentów to należy użyć
(void)
. Jeśli uważasz C++ za takie niesamowicie dobrze zaprojektowane, to powiedz mi co znaczy kod:
int main() {
MyClass my_var();
}
Jestem zaiste ciekaw, czy potrafisz odpowiedzieć dobrze.
EDIT: no, żeby być dokładnym to ten konstruktor może być też z parametrami z wartościami domyślnymi.
MyClass
. Ba dum tsss! C++ jest językiem kontekstowym, a dla języka programowania, jak wszyscy wiemy, to wielkie:
Akurat dla mnie, jak to nazwałeś "kontekstowość" nie jest wadą. Kompilator czy normalne ide pozwalają tutaj wszystko ogarniać bez żadnych problemów czy wątpliwości.
ps. gdybyś podał kontekst to bez problemu bym na to odpowiedział, nawet pod tym tagiem był temat poruszany, więc słabo...
C++ nawet nie ma sensownego systemu modułów tylko hacki na inkludach i pierdyliard różnych systemów budowania. Jak używasz w projekcie 10 bibliotek z 4 różnymi systemami budowania, to konfiguracja IDE tak, żeby sparsował źródła poprawnie, i dało się ctrl+kliknięciem chodzić po kodzie
class MyClass {
void operator()() {}
};
int main() {
MyClass foo();
foo();
}
MyClass foo() {}
I działa: http://ideone.com/j81cWJ. Aż mnie ciekawi ile tu jest
undefined behaviour
.
wywołujesz funkcję foo zadeklarowaną 3 linijki wyżej i zdefiniowaną pod mainem.
Ja nie znam C - do czego się przyznaję, ale ty najwidoczniej nie znasz c++ ;)
edyta: wejdź w link podany przez Krzaq to dowiesz się dlaczego (standard)
edyta kolejna: link który podałeś nie działa.