Goto page 1, 2, 3, 4 Next
Guest
Thu Aug 04, 2016 8:09 am
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 !!
Mateusz Viste
Guest
Thu Aug 04, 2016 8:09 am
On 04/08/2016 08:09, stchebel@gmail.com wrote:
Quote:
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);
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
Ghost
Guest
Thu Aug 04, 2016 8:09 am
Użytkownik napisał w wiadomości grup
dyskusyjnych:c668b776-b84c-427e-9ec5-92058735710a@googlegroups.com...
Quote:
To chyba jest "elementarz" C, ale pytanie zupełnie serio, nie robię sobie
tutaj jaj !!
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.
ajt
Guest
Thu Aug 04, 2016 8:09 am
W dniu 2016-08-04 o 09:24, stchebel@gmail.com pisze:
Quote:
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).
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 ...
Quote:
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

)
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ł
--
Pozdrawiam
Andrzej
www.radom.city
J.F.
Guest
Thu Aug 04, 2016 8:16 am
Użytkownik stchebel napisał w wiadomości grup
Quote:
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ć.
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 :-)
Quote:
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!!
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 ?
Quote:
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

)
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.
Mateusz Viste
Guest
Thu Aug 04, 2016 8:16 am
On 04/08/2016 09:40, stchebel@gmail.com wrote:
Quote:
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.
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
Ghost
Guest
Thu Aug 04, 2016 8:42 am
Użytkownik napisał w wiadomości grup
dyskusyjnych:29f17d21-b0b0-4c39-accb-5f6e2410660c@googlegroups.com...
Quote:
Nie wiem gdzie zyskujemy na czytelności..
Programowanie nie jest dla ciebie

Niezależnie od języka.
Ghost
Guest
Thu Aug 04, 2016 8:47 am
Użytkownik napisał w wiadomości grup
dyskusyjnych:9756d847-22a1-444a-b88c-f17ae5805bf4@googlegroups.com...
W dniu czwartek, 4 sierpnia 2016 09:53:22 UTC+2 użytkownik ajt napisał:
Quote:
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
...
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?
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
Mateusz Viste
Guest
Thu Aug 04, 2016 9:01 am
On 04/08/2016 10:18, stchebel@gmail.com wrote:
Quote:
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?
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
Mateusz Viste
Guest
Thu Aug 04, 2016 9:10 am
On 04/08/2016 10:55, stchebel@gmail.com wrote:
Quote:
Byle gdzie przeczytałeś parę zdań, a co do meritum tematu nie masz bladego pojęcia. Przeczytaj główny wątek !!
Faktycznie mój błąd - było "opisz różnicą między prototypami po żołniersku".
To może pl.misc.militaria ?
Mateusz
Guest
Thu Aug 04, 2016 9:24 am
W dniu czwartek, 4 sierpnia 2016 08:22:09 UTC+2 użytkownik Mateusz Viste napisał:
Quote:
On 04/08/2016 08:09, stchebel@gmail.com wrote:
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);
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ą!).
==========
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

)
J.F.
Guest
Thu Aug 04, 2016 9:36 am
Użytkownik stchebel napisał w wiadomości grup
W dniu czwartek, 4 sierpnia 2016 10:16:47 UTC+2 użytkownik J.F.
napisał:
Quote:
Zreszta ... kto nie programowal w PL/1, ten nie wie co to jest
konwersja typow
Nie wiem nawet i nie chcę wiedzieć czym jest PL/1. Domyślam się, że
tam to dopiero jest Brothel

)
Powiedzmy tak:
J=1 ;
IF J=1 THEN ...
Myslisz, ze warunek jest prawdziwy ? To sie mylisz.
Quote:
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!!
Jaki burdel ? Zmienna deklarujesz w "bloku" tzn w {}. I w tymze
bloku
obowiazuje.
Nie pamietam - a w Pascalu nie jest tak samo ?
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ć
Dziesiec stron wczesniej na wydruku :-)
Quote:
Owszem, jakies ambitniejsze konstrukcje wskaznikowo-tablicowe moga
czlowieka dobic, ale coz robic
Otóż i to. Nawet tak duperelny temat jak mnożenie macierzy, gdzie
traba pamiętać o odjęciu jedynki od numery wiersz/kolumny.
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 :-)
Quote:
Nie narzekaj na C. Poznasz C++, to C wyda ci sie idealem
Niestety.. Nie poznam.. Jestem niereformowalny, wątek utworzyłem
tylko by upewnić się czy rozumiem pewne źródło.
Kiedys i Pascala rozwina.
Juz chyba rozwineli (Delphi) :-)
J.
Guest
Thu Aug 04, 2016 9:40 am
W dniu czwartek, 4 sierpnia 2016 08:43:02 UTC+2 użytkownik Ghost napisał:
Quote:
Użytkownik napisał w wiadomości grup
dyskusyjnych:c668b776-b84c-427e-9ec5-92058735710a@googlegroups.com...
To chyba jest "elementarz" C, ale pytanie zupełnie serio, nie robię sobie
tutaj jaj !!
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.
Quote:
Zatem skoro * dotyczy tylko elementu tuż za znakiem, to przytulajmy go doń,
na pewno zyskujemy na czytelności.
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.
Grzegorz Niemirowski
Guest
Thu Aug 04, 2016 9:47 am
stchebel@gmail.com <stchebel@gmail.com> napisał(a):
Quote:
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.
Ta grupa to nie jest miejsce na wojenki C vs Pascal.
Quote:
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!!
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
Quote:
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
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.
Quote:
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

)
Najpierw zrozum C, a potem pisz emocjonalne posty.
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express:
http://www.grzegorz.net/oe/
Uptime: 8 days, 12 hours, 17 minutes and 38 seconds
Guest
Thu Aug 04, 2016 9:48 am
W dniu czwartek, 4 sierpnia 2016 08:22:09 UTC+2 użytkownik Mateusz Viste napisał:
Quote:
Temat bardziej na pl.comp.lang.c swoją drogą (a tamtejsi "bogowie" wcale
nie gryzą!).
OK, zapytam
Goto page 1, 2, 3, 4 Next