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.
Didn't find your answer? Ask the community — no account required.
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...
P
Piotr Gałka
Użytkownik snipped-for-privacy@gmail.com napisał w wiadomości news: snipped-for-privacy@googlegroups.com...
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.
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.
S
Sebastian Biały
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ą.
G
Ghost
Użytkownik napisał w wiadomości grup dyskusyjnych: snipped-for-privacy@googlegroups.com...
Należy z powodu głupich odruchów. Ale nie ma obowiązku
G
Ghost
Użytkownik napisał w wiadomości grup dyskusyjnych: snipped-for-privacy@googlegroups.com...
W dniu czwartek, 4 sierpnia 2016 10:42:55 UTC+2 użytkownik Ghost napisał:
tak
M
Marek
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.
G
Ghost
Użytkownik "Grzegorz Niemirowski" napisał w wiadomości grup dyskusyjnych:nnv3av$4m9$ snipped-for-privacy@node1.news.atman.pl...
Użytkownik "Grzegorz Niemirowski" napisał w wiadomości grup dyskusyjnych:no2hr7$558$ snipped-for-privacy@node2.news.atman.pl...
dla deklaracji int *y;
a=4 /* y;
vs
a=4 / *y;
widać różnicę?
P
PcmOl
Nędznej baletnicy wadzi rąbek przy spódnicy. :D
G
Ghost
Użytkownik napisał w wiadomości grup dyskusyjnych: snipped-for-privacy@googlegroups.com...
nie ma - trzeba poskładać z wielu wyrażeń, ale tego rodzaju syfiate składanki zrobię ci w dowolnym języku
J
J.F.
Użytkownik "Ghost" napisał w wiadomości grup dyskusyjnych:57a4da2f$0$15194$ snipped-for-privacy@news.neostrada.pl... Użytkownik "Grzegorz Niemirowski" napisał w wiadomości grup
int *y;
a=4 /* y; vs a=4 / *y;
No widac. Choc jeszcze mamy a=4 /*y; i a=4/*y;
Hm, a jak to bedzie, jesli *y bedzie zdefiniowane przez #define ? No, jak bedzie prawidlowo zdefiniowane, tzn (*y) czy (*(y)), to dobrze bedzie :-)
J.
M
Mateusz Viste
Domyślam się, że OP miał na myśli tego typu konstrukcję:
unsigned short a = 2; printf("%s\n", a > 0 ? "liczba dodatnia" : "zero");
Co prawda nie odpowiada dokładnie opisowi, ale z reguły właśnie na to skarżą się nowicjusze zanim zrozumieją w jakich sytuacjach to się bardzo przydaje.
Mateusz
G
Ghost
Użytkownik "J.F." napisał w wiadomości grup dyskusyjnych:57a4e880$0$12543$ snipped-for-privacy@news.neostrada.pl...
Użytkownik "Ghost" napisał w wiadomości grup dyskusyjnych:57a4da2f$0$15194$ snipped-for-privacy@news.neostrada.pl... Użytkownik "Grzegorz Niemirowski" napisał w wiadomości grup
oraz np. a = 4 / *y
czy to cos zmienia, czy znów się nudzisz?
G
Ghost
raczej
ab?C()
G
Grzegorz Niemirowski
Ghost snipped-for-privacy@drzewo.pl napisał(a):
Widać, aczkolwiek dla mnie jest to przykład dosyć abstrakcyjny. Nie pamiętam, żebym się z takim przypadkiem spotkał. Co innego deklaracje kilku zmiennych w jednej linijce.
G
Ghost
Użytkownik "Grzegorz Niemirowski" napisał w wiadomości grup dyskusyjnych:no2vii$2t8$ snipped-for-privacy@node1.news.atman.pl...
Ghost snipped-for-privacy@drzewo.pl napisał(a):
Nigdy nie dzieliłeś? Czy nie dzieliłeś przez wartość wskazywaną?
S
slawek
Są takie same dla kompilatora (jeżeli kompilator jest kompilatorem C/C++).
Nie są takie same z punktu widzenia filozofii programowania: gwiazdka przyklejona do typu tworzy jakby nowy typ, gwiazdka przyklejona do zmiennej modyfikuje sposób traktowania zmiennej. Nie w sensie standardu, ale w sensie skojarzeń w mózgu programisty.
Nota bene...
Jeżeli ktoś napisze definicję:
int* a,b;
to jest to to samo co
int *a; int b;
a nie jak mogłobysię
int *a; int *b;
S
slawek
Należy każda zmienną definiować /deklarować w osobnej linii/instrukcji. Oraz używać typedef.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.