RTV forum PL | NewsGroups PL

Różnice w znakach wskaźników w definicji funkcji w C/C++ - które wybrać?

Pytanko dotyczące C/C++

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Różnice w znakach wskaźników w definicji funkcji w C/C++ - które wybrać?

Goto page Previous  1, 2, 3, 4  Next

Grzegorz Niemirowski
Guest

Thu Aug 04, 2016 9:53 am   



stchebel@gmail.com <stchebel@gmail.com> napisał(a):
Quote:
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.

Spacje przy gwiazdkach nie mają znaczenia dla kompilatora. Natomiast w
przypadku
int *a, b;
lepiej nie robić odstępu po gwiazdce, bo dzięki temu lepiej widać, że a
będzie wskaźnikiem, a b nie. To tylko pomoc dla programisty i chyba nie ma
innych przypadków gdzie położenie gwiazdki coś zmienia.

--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 8 days, 12 hours, 25 minutes and 7 seconds

Grzegorz Niemirowski
Guest

Thu Aug 04, 2016 10:01 am   



stchebel@gmail.com <stchebel@gmail.com> napisał(a):
Quote:
Dam ci radę: Przestań udzielać rad.

Naprawdę byłoby prościej, gdybyś sam się do dwóch prostych rad zastosował:
- mniej emocji i wulgaryzmów, więcej merytoryki
- jak pytasz o C/C++, to nie wrzucaj filozoficznych rozważań o Pascalu albo
co myślisz o składni C. Kogo to interesuje? To nawet nie jest grupa
programistyczna.

O tym, że nie lubisz składni C informowałeś już grupę wielokrotnie. Zamiast
jednak jako tako poznać w końcu to nieszczęsne C, to ciągle narzekasz na
jakieś pierdoły zamiast lepiej poznać filozofię tego języka. A potem się
dziwisz, jak ktoś Ci napisze że programowanie nie jest dla Ciebie...

--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 8 days, 12 hours, 31 minutes and 31 seconds

Guest

Thu Aug 04, 2016 10:18 am   



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?

Piotr Gałka
Guest

Thu Aug 04, 2016 10:33 am   



Użytkownik <stchebel@gmail.com> napisał w wiadomości
news:29f17d21-b0b0-4c39-accb-5f6e2410660c@googlegroups.com...

Quote:
int *a, b;
int* a, b;
Zatem skoro * dotyczy tylko elementu tuż za znakiem, to przytulajmy go
doń,
na pewno zyskujemy na czytelności.

Nie wiem gdzie zyskujemy na czytelności..

Serio nie widzisz różnicy w czytelności?
Patrząc na wszystkie deklaracje w taki sposób:
typ coś1, coś2, coś3...
i wszystkie coś-e muszą mieć typ równy typ.
Jak masz napisane:
int *a, b;
To od razu widzisz, że zarówno *a jak i b są typu int.
A jak napiszesz:
int* a, b;
to możesz myśleć, że zarówno a jak i b są typu int*, co nie jest prawdą.
Dlatego pierwszy zapis jest czytelniejszy, choć oba poprawne.

Ja piszę tak, aby nie mieć nigdy takich wątpliwości. Jak nie jestem na 100%
pewien, jak co kompilator zinterpretuje, to nie stosuję takiego zapisu.
Moje deklaracje wyglądają np. tak:
int i,j,m,n,c;
int *p;
int *s;
int t[10];
Kiedyś jak na całym ekranie mieściło się 25 linijek, a w środowisku typu
Turbo C++ okienko dla źródła miało jeszcze mniej to takie marnowanie linijek
mogło boleć, ale to już dawno za nami.
Poza tym mało kiedy funkcja ma tyle zmiennych.

Quote:
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.

Nigdy nie pisałem w assemblerze, ale czy "mov a, b" nie zadziała tak samo
jak "mov a ,b"?
Jeśli tak to zapytam: Dlaczego odmawiasz * prawa do takiego samego
zachowania się jak , ?

Wydaje mi się, że dawniej wszystkie deklaracje musiały być na początku bloku
funkcji (a może każdego bloku). Możliwość deklaracji typu for(int
i=0;i<10;i++) została wprowadzona dla wygody programistów, ale nie ma
przymusu.
P.G.

Guest

Thu Aug 04, 2016 10:42 am   



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 Smile

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

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 ?

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ć

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 Smile)



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.

Quote:
Nie narzekaj na C. Poznasz C++, to C wyda ci sie idealem Smile

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

Quote:

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 ..


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

Guest

Thu Aug 04, 2016 10:55 am   



W dniu czwartek, 4 sierpnia 2016 10:16:41 UTC+2 użytkownik Mateusz Viste napisał:
Quote:
On 04/08/2016 09:40, stchebel@gmail.com wrote:
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

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 !!

Guest

Thu Aug 04, 2016 11:02 am   



W dniu czwartek, 4 sierpnia 2016 10:48:34 UTC+2 użytkownik Ghost napisał:
Quote:
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ł:


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

======
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.

Sebastian Biały
Guest

Thu Aug 04, 2016 11:19 am   



On 2016-08-04 08:41, Ghost wrote:
Quote:
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.

Dlatego istnieją coding standardy, niektóre w sposób automatyczny
sprawdzane. Zazwyczaj istnieje jawny zakaz deklaracji po przecinku.
C/C++ to język o niezwykłych mozliwościach i miliardzie błedów do
popełnienia. Coding standardy zazwyczaj bazują na doświadczeniu zespołu
z takimi błedami i warto się rozejrzeć jak inni to robią.

Guest

Thu Aug 04, 2016 11:26 am   



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

Quote:

Nie wiem gdzie zyskujemy na czytelności..

Programowanie nie jest dla ciebie Smile Niezależnie od języka.

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.

Ghost
Guest

Thu Aug 04, 2016 11:26 am   



Użytkownik napisał w wiadomości grup
dyskusyjnych:6c4fefdb-84c0-4b03-92e8-ef932f72f322@googlegroups.com...

Quote:
Należy, czy trzeba?

Należy z powodu głupich odruchów. Ale nie ma obowiązku

Ghost
Guest

Thu Aug 04, 2016 11:28 am   



Użytkownik napisał w wiadomości grup
dyskusyjnych:596cf112-79ef-4538-a2e7-3702fe04030a@googlegroups.com...

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

Quote:

Nie wiem gdzie zyskujemy na czytelności..

Programowanie nie jest dla ciebie Smile Niezależnie od języka.

Jeżeli takie wnioski wyciągasz na podstawie mojego zdania dotyczącego
czytelności żródła

tak

Marek
Guest

Thu Aug 04, 2016 4:05 pm   



On Thu, 4 Aug 2016 02:26:14 -0700 (PDT), stchebel@gmail.com wrote:
Quote:
Dam ci radę: Przestań udzielać rad.

Akurat miał rację, z Twoich komentarzy faktycznie można wyciągać taki
wniosek. Spróbuj zająć się czymś innym, myślę że jest sporo innych
zajęć, które nie będą w Tobie wywoływać tyle frustracji.

--
Marek

Ghost
Guest

Fri Aug 05, 2016 9:05 am   



Użytkownik "Grzegorz Niemirowski" napisał w wiadomości grup
dyskusyjnych:nnv3av$4m9$1@node1.news.atman.pl...

stchebel@gmail.com <stchebel@gmail.com> napisał(a):
Quote:
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.

Spacje przy gwiazdkach nie mają znaczenia dla kompilatora. Natomiast w
przypadku
int *a, b;
lepiej nie robić odstępu po gwiazdce, bo dzięki temu lepiej widać, że a
będzie wskaźnikiem, a b nie. To tylko pomoc dla programisty i chyba nie ma
innych przypadków gdzie położenie gwiazdki coś zmienia.

W c? Np. w przypadku dzielenia.

Grzegorz Niemirowski
Guest

Fri Aug 05, 2016 5:19 pm   



Quote:
Spacje przy gwiazdkach nie mają znaczenia dla kompilatora. Natomiast w
przypadku
int *a, b;
lepiej nie robić odstępu po gwiazdce, bo dzięki temu lepiej widać, że a
będzie wskaźnikiem, a b nie. To tylko pomoc dla programisty i chyba
nie ma innych przypadków gdzie położenie gwiazdki coś zmienia.
W c? Np. w przypadku dzielenia.

Poproszę przykład.

--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 9 days, 19 hours, 55 minutes and 53 seconds

Ghost
Guest

Fri Aug 05, 2016 6:25 pm   



Użytkownik "Grzegorz Niemirowski" napisał w wiadomości grup
dyskusyjnych:no2hr7$558$1@node2.news.atman.pl...

Quote:
Spacje przy gwiazdkach nie mają znaczenia dla kompilatora. Natomiast w
przypadku
int *a, b;
lepiej nie robić odstępu po gwiazdce, bo dzięki temu lepiej widać, że a
będzie wskaźnikiem, a b nie. To tylko pomoc dla programisty i chyba
nie ma innych przypadków gdzie położenie gwiazdki coś zmienia.
W c? Np. w przypadku dzielenia.

Poproszę przykład.

dla deklaracji
int *y;

a=4 /* y;

vs

a=4 / *y;

widać różnicę?

Goto page Previous  1, 2, 3, 4  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Różnice w znakach wskaźników w definicji funkcji w C/C++ - które wybrać?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map