Kezdőoldal » Számítástechnika » Programozás » Miért kellenek a zárójelek a...

Miért kellenek a zárójelek a #define-okhoz?

Figyelt kérdés

A c kódom ami nem megy:


#define width 64

#define height 64

#define new_width width - 2

#define new_height height - 2

#define size_new_width * new_height

int Arr[size_new_width];



Azt írja ki, hogy az Arr arraynak negatív a mérete. Azonban ha a definiált dolgokat zárójelbe teszem ( pl. #define new_width (width - 2) ) minden működik.


2018. jún. 30. 23:06
 1/4 anonim ***** válasza:
100%

Mert a szorzas erosebb mint a kivonas:


int Arr[new_width width - 2 * new_height];

2018. jún. 30. 23:08
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:
Azt kell megérteni, hogy ezek a preprocessor makrók semmi mást nem csinálnak, mint a kódban kicserélik a megadott azonosítót a megadott kóddal, betűre pontosan. Tehát a new_width helyére nem 62 cserélődik be, hanem 64 - 2. És így pl a new_width * 2 az nem 62 * 2 lesz, hanem 64 - 2 * 2. Műveleti sorrend pedig innentől adja magát. Ezért NAGYON fontos megfelelően zárójelezni ezeket a makrókat.
2018. jún. 30. 23:29
Hasznos számodra ez a válasz?
 3/4 anonim ***** válasza:
Előzők leírták a lényeget, csak annyit még, hogy a #define sorokat nem látja a fordító, azokat az előfordító (preprocessor) cseréli le sztringként. Tehát ő nem fogja kiszámolni a kifejezéseket, nem is érdekli, hogy az egy szám-e, ő sima szöveges fájlnak tekinti a forráskódot, és szövegként cseréli mindenütt a megadott sztringre a szimbólumot. A kiértékelést csak ezután végzi a fordító.
2018. júl. 2. 00:18
Hasznos számodra ez a válasz?
 4/4 anonim ***** válasza:

Ez nincs elírva? Mi a szimbólum és mi a helyettesítő sztring?

#define size_new_width * new_height

2018. júl. 2. 22:22
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!