Pytanko dotyczące C/C++

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

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.

Reply to
Grzegorz Niemirowski
Loading thread data ...

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

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

Reply to
Grzegorz Niemirowski

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.

Reply to
Piotr Gałka

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

Reply to
Sebastian Biały

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

Reply to
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

Reply to
Ghost

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.

Reply to
Marek

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

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

W c? Np. w przypadku dzielenia.

Reply to
Ghost

Poproszę przykład.

Reply to
Grzegorz Niemirowski

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ę?

Reply to
Ghost

Nędznej baletnicy wadzi rąbek przy spódnicy. :D

Reply to
PcmOl

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

Reply to
Ghost

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.

Reply to
J.F.

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

Reply to
Mateusz Viste

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?

Reply to
Ghost

raczej

a<b?A():a=b?B():a>b?C()

Reply to
Ghost

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.

Reply to
Grzegorz Niemirowski

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ą?

Reply to
Ghost

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;

Reply to
slawek

Należy każda zmienną definiować /deklarować w osobnej linii/instrukcji. Oraz używać typedef.

Reply to
slawek

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.