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.
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...
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.
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ą.
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.
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 :-)
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.
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
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.
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.
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.