Pytanko dotyczące C/C++

Może trochę NTG, ale chyba prędzej tutaj uzyskam konkretną odpowiedź, niż na grupie "BOGÓW" od C/C++. Jak wiecie, mam trochę wstręta do C, ale nie w tym rzecz. Prośba: Napiszcie mi w kilku "żołnierskich" słowach jaka jest różnica/jak to interpretować:

1) void Jakaś_Tam_Funkcja(int* Jakaś_Tam_Zmienna); 2) void Jakaś_Tam_Funkcja(int *Jakaś_Tam_Zmienna); 3) void Jakaś_Tam_Funkcja(int * Jakaś_Tam_Zmienna);

=============

Tematy softwarowe zlecam fachowcom, ale muszę(ino z ciekawości) rozgryźć pewne źródło programistyczne, które z pewnych powodów muszę zaimplementować (już zrobione) na sztywno w hardware. Na 100% da się wiedząc od strony matematycznej w czym rzecz. Skoro się da, skoro jest znany model matematyczny, no to kurka wódka po cholerę mi soft i uC/uP (w tej konkretnej aplikacji, uC/uP to bardzo pożyteczne stworzenia w wielu sytuacjach),trochę posiedziałem nad projektem i jest OK.

A pytanie/o co marudzę? Ot z czystej ciekawości...

To chyba jest "elementarz" C, ale pytanie zupełnie serio, nie robię sobie tutaj jaj !!

Reply to
stchebel
Loading thread data ...

Różnica: żadna. Wszystkie trzy prototypy są jednoznaczne, i deklarują funkcję która nic nie zwraca, a która jako parametr oczekuje wskaźnika do inta - a czym jest int, to już zależy od platformy - ANSI mówi tylko że ma mieć co najmniej 16 bitów.

Temat bardziej na pl.comp.lang.c swoją drogą (a tamtejsi "bogowie" wcale nie gryzą!).

Mateusz

Reply to
Mateusz Viste

Użytkownik napisał w wiadomości grup dyskusyjnych: snipped-for-privacy@googlegroups.com...

Na Twoje pytanie już padła odpowiedz, w ramach rozszerzenia:

deklaracje

int *a, b; i int* a, b;

też są równoważne, ale z drugiej ktoś niedoświadczony (choć niekoniecznie) mógłby wywnioskować, że obie zmienne to wskaźniki. Zatem skoro * dotyczy tylko elementu tuż za znakiem, to przytulajmy go doń, na pewno zyskujemy na czytelności.

Reply to
Ghost

===========

Nie chodzi mi o "void". To akurat jest zrozumiałe. Chodzi mi o umiejscowienie "*" w deklaracji zmiennej wejściowej. (typ* zmienna, typ *zmienna, typ * zmienna). A co się tyczy "bogów" z pl.comp.lang.c, to niestety z Bogiem nie pogadasz. Kiedyś wdałem się tam w dyskusję dot. składni C vs. Pascal. Na dobrą sprawę, "filozofia" obu języków jest IDENTYCZNA !! Pomijam takie pierdulamenty jak "begin/{", bądź "end/}", na co głównie młodzianie zwracają uwagę. Ich zdaniem, ten begin/end to syf!!

Wgłębiając się jednak ciutę głębiej w C/Pascal, są jednak pewne różnice wynikające chociażby z zapisu i wymiany danych o różnych typach. Pascal jest kurewsko restrykcyjny w typach zmiennych. Nawet na pozomie kompilacji potrafi pokazać środkowy paluch ku górze.

W C natomiast, masz możliwość typowania danych, cholernie trzeba z tym uważać. No i kwestia porządku. W swojej biblioteczce mam książki poukładane sensownie. Koziołek Matołek jest na zupełnie innej półce niż Matematyka w Fizyce Klasycznej i Kwantowej/Byron&Fuller. Tymczasem w C, możesz zadeklarować nazwę zmiennej gdzie popadnie. Nawet zmienną sterującej pętli wewnątrz pętli!! for(int i.. i tak dalej) . BURDEL jak cholera !! Hahh!! Jest też w C jakiś tam zapis(jednolinijkowy), którego treść jest taka: Jeżeli a<b, to zrób "A", jeżeli a=b, to zrób "B", jeżeli a>b, to zrób "C". Nie pamiętam dokładnie tej składni, ale jest coś takiego w C, i jest to bardziej pojebane niż zapis całej tej procedury w Assemblerze.

A idę o zakład , że:

1) Każdy algorytmista czytając żródło w Pascalu, zrozumie o co chodzi 2) Czytając żródło C - będzie czkawka :))
Reply to
stchebel

W dniu czwartek, 4 sierpnia 2016 08:43:02 UTC+2 użytkownik Ghost napisał:

Japierdole!!! Przepraszam, to nie jest reakcja w Twoją stronę, lecz w stronę developerów C. Nie wiem gdzie zyskujemy na czytelności.. Gwiazdka w lewo, prawo, pośrodku, znaki zapytania gdziebądź, wykrzykniki itd, itp..

Nosz kurwa, wolę w assemblerze mov a,b - przynajmniej wiadomo o co chodzi.

Reply to
stchebel

W dniu czwartek, 4 sierpnia 2016 08:22:09 UTC+2 użytkownik Mateusz Viste napisał:

OK, zapytam

Reply to
stchebel

W dniu 2016-08-04 o 09:24, snipped-for-privacy@gmail.com pisze:

Umiejscowienie nie ma żadnego znaczenia, wszystkie trzy przykłady są równoważne, pominąłeś jeszcze typ*zmienna, to również to samo. Oczywiście nie można wykluczyć jakiejś egzotycznej implementacji, gdzie ktoś w ten sposób chciałby nadać inne znaczenia, ale to już nie byłoby C ...

Dawno temu miałem zajęcia z nieżyjącym już niestety Janem Bieleckim. Na zaliczenie trzeba było zrobić erratę do jego kolejnej książki o C czy C++. Po dokładnym przeanalizowaniu kilkudziesięciu pokręconych przykładów (a JB lubił wymyślać różne dziwolągi składniowe) i znalezieniu sporej liczby błędów nie miałem już problemów z rozumieniem źródeł :)

Reply to
ajt

Użytkownik stchebel napisał w wiadomości grup

To jest koniecznosc. Zreszta teraz w C++/C# enuma sp* maksymalnie ... a moze tak ma byc, dlugosc tekstu sie nie liczy.

Zreszta ... kto nie programowal w PL/1, ten nie wie co to jest konwersja typow :-)

Jaki burdel ? Zmienna deklarujesz w "bloku" tzn w {}. I w tymze bloku obowiazuje. Dzieki temu nie musisz daleko patrzec. Nie pamietam - a w Pascalu nie jest tak samo ?

Niewatpliwe w C, da sie napisac program w sposob bardzo zagmatwany. Ale po co to robic ? Mozesz pisac rownie elegancko jak w Pascalu.

Owszem, jakies ambitniejsze konstrukcje wskaznikowo-tablicowe moga czlowieka dobic, ale coz robic

Nie narzekaj na C. Poznasz C++, to C wyda ci sie idealem :-)

Niejaki AL tu zwracal swego czasu uwage na jedna ceche Pascala - zagniezdzone procedury/funkcje, i ich zmienne. Procedury maja dostep do zmiennych procedury nadrzednej, co znakomicie utrudnia implementacje ..

J.

Reply to
J.F.

Nie rozumiem dlaczego w takim razie upierasz się przy C. Nie podoba się

- działaj w czymkolwiek innym... Filozoficzne narzekania prowadzą do nikąd.

Mateusz

Reply to
Mateusz Viste

W dniu czwartek, 4 sierpnia 2016 09:53:22 UTC+2 użytkownik ajt napisał:

Dzięki za odpowiedź. Chyba nie do końca prawidłowo zadałem pytanie. Korekta:

1) void Jakaś_Tam_Funkcja(typ* zmienna_1,zmienna_2,....,zmienna_n); 2) void Jakaś_Tam_Funkcja(typ *zmienna_1,zmienna_2,....,zmienna_n); 3) void Jakaś_Tam_Funkcja(typ * zmienna_1,zmienna_2,....,zmienna_n);

Chodzi mi o cały wektor zmiennych. Aha , pominąłem jeszcze to samo jak wyżej, ale BEZ GWIAZDKI!! Jak to wtedy działa?

Reply to
stchebel

Użytkownik napisał w wiadomości grup dyskusyjnych: snipped-for-privacy@googlegroups.com...

Programowanie nie jest dla ciebie :-) Niezależnie od języka.

Reply to
Ghost

W dniu czwartek, 4 sierpnia 2016 10:16:47 UTC+2 użytkownik J.F. napisał:

Nie wiem nawet i nie chcę wiedzieć czym jest PL/1. Domyślam się, że tam to dopiero jest Brothel :))

Prawie tak samo, tylko ciuta porządniej. Nie w bloku {-}/begin-end, lecz w dedykowanym bloku deklaracji zmiennych lokalnych (var), zaraz po deklaracji funkcji/procedury(w C jest to "void" - boszsz...). Dzięki temu nie ma potrzeby szukania blisko/daleko.. Po prostu wiadomo gdzie szukać

Otóż i to. Nawet tak duperelny temat jak mnożenie macierzy, gdzie traba pamiętać o odjęciu jedynki od numery wiersz/kolumny.

Niestety.. Nie poznam.. Jestem niereformowalny, wątek utworzyłem tylko by upewnić się czy rozumiem pewne źródło.

Istotnie, sam kiedyś miałem na tym delikatnego poślizga. Podobnież miał to kolega AG.

Reply to
stchebel

Użytkownik napisał w wiadomości grup dyskusyjnych: snipped-for-privacy@googlegroups.com...

W dniu czwartek, 4 sierpnia 2016 09:53:22 UTC+2 użytkownik ajt napisał:

I nie masz odruchowego wrażenia, ze

typ* zmienna_1,zmienna_2,....,zmienna_n oznacza deklaracje n zmiennych każda typu typ*

a typ *zmienna_1,zmienna_2,....,zmienna_n oznacza deklaracje zmienna_1 typu typ*, oraz n-1 zmiennych typu typ?

Tymczasem obie deklarację robią to samo, znaczy realizują drugi przypadek, dlatego należy trzymać gwiazdki przy zmiennych

Reply to
Ghost

Przeczytaj główny wątek do końca ze zrozumieniem.Gdzie chłopie ja się upieram przy C? I nie wcinaj się byle gdzie w dyskusję nie wiedząc o co chodzi. Bo to właśnie jest "mondralowanie" prowadzące do nikąd. To coś jak z deklaracją zmiennej w C byle gdzie. Byle gdzie przeczytałeś parę zdań, a co do meritum tematu nie masz bladego pojęcia. Przeczytaj główny wątek !!

Reply to
stchebel

wtedy działa?

Bez gwiazdki to po prostu int przepisany "by value", a nie wskaźnik ("by reference").

Co do "wektora zmiennych", to w powyższym przykładzie nic takiego nie ma miejsca. To po prostu lista parametrów, gdzie pierwszy parametr jest wskaźnikiem do zmiennej typu "typ", a kolejne są int-ami (brak definicji typu = int, patrz sekcja 6.7.1 z ISO/IEC 9899:1990).

Naturalnie składnia "...." jest nieprawidłową deklaracją funkcji wariadycznej, ale domniemywam że nie było to celowe.

Zapraszam na pl.comp.lang.c - lub (zależnie od nastawienia) - pl.sci.filozofia

Mateusz

Reply to
Mateusz Viste

W dniu czwartek, 4 sierpnia 2016 10:48:34 UTC+2 użytkownik Ghost napisał:

=======

Otóż mam takie odruchowe wrażenie, ale wolę się upewnić. Piszesz, że należy trymać gwiazdki przy zmiennych. Należy, czy trzeba? Przepraszam, moje pytania mogą wydawać się irytujące, ale pytam zupełnie serio. Różne "ciekawe" historie przytrafialy mi się z wszelakimi narzędziami programistycznymi zarówno w hard i soft.

Reply to
stchebel

Faktycznie mój błąd - było "opisz różnicą między prototypami po żołniersku".

To może pl.misc.militaria ?

Mateusz

Reply to
Mateusz Viste

W dniu czwartek, 4 sierpnia 2016 10:42:55 UTC+2 użytkownik Ghost napisał:

Jeżeli takie wnioski wyciągasz na podstawie mojego zdania dotyczącego czytelności żródła na podstawie umiejscowienia gwiazdki w lewo/prawo/pośrodku, to zapewne mógłbyś L. Armstrongowi pytającemu o kształt klucza wiolinowego udzielić porady: muzyka nie jest dla ciebie, niezależnie od instrumentu.

Dam ci radę: Przestań udzielać rad.

Reply to
stchebel

Użytkownik stchebel napisał w wiadomości grup W dniu czwartek, 4 sierpnia 2016 10:16:47 UTC+2 użytkownik J.F. napisał:

Powiedzmy tak: J=1 ; IF J=1 THEN ...

Myslisz, ze warunek jest prawdziwy ? To sie mylisz.

Dziesiec stron wczesniej na wydruku :-)

Po co ? Mnozenie nie wymaga znajomosci nr wiersza czy kolumny.

A nie pamietam - w Pascalu byla mozliwosc przekazania do funkcji tablicy dwuwymiarowej o nieokreslonym rozmiarze ?

A potem jeszcze napisz procedure odwracajaca macierz ... zespolona. Niech zyje Fortran :-)

Kiedys i Pascala rozwina. Juz chyba rozwineli (Delphi) :-)

J.

Reply to
J.F.

snipped-for-privacy@gmail.com snipped-for-privacy@gmail.com napisał(a):

Ta grupa to nie jest miejsce na wojenki C vs Pascal.

No właśnie porządek jest. Widzisz wyraźnie, że ta zmienna należy do tej pętli i jest niewidoczna poza nią. Przecież deklarowanie jej poza pętlą to tak jak deklarowanie zmiennej globalnej w stosunku do zmiennej zadeklarowanej wewnątrz funkcji.

Jest też w C jakiś tam zapis(jednolinijkowy), którego

Chyba masz na myśli ternary conditional (a ? b : c), który zwraca b jeśli jest a jest prawdą lub c jeśli a jest fałszem. Jest to bardzo przydatne i nie wiem o co się czepiasz.

Najpierw zrozum C, a potem pisz emocjonalne posty.

Reply to
Grzegorz Niemirowski

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.