Kezdőoldal » Számítástechnika » Programozás » C-ben az if az tulajdonképpen...

C-ben az if az tulajdonképpen micsoda? Utasítás, függvény, vagy valami más?

Figyelt kérdés
Mint ahogy Haskellben szokták mondani, hogy minden függvény, ehhez hasonlóan kíváncsi lennék, hogy C nyelvben egy elemi dolog tulajdonképpen mit jelent? Vagy C nyelvben nincs ilyen? Assembly kódban ugróutasítások lesznek a vezérlési szerkezetekből és kész?

2020. jún. 11. 23:27
 1/6 anonim ***** válasza:
63%
Ugro utasitas lesz belole.
2020. jún. 11. 23:50
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:
100%

A szabvány szerint:

[link] [link]

szelekciós utasítás.

2020. jún. 12. 00:07
Hasznos számodra ez a válasz?
 3/6 anonim ***** válasza:
63%

Assemblyben maga a feltételvizsgálat egy CMP, az ágak meg feltétel nélküli (JMP) és feltételes (JE, JNE, JG, JGE, JL, JLE,...) ugróutasítások.


Egyébként ha szimplán csak lefordítod a c kódot (nem linkeled):

gcc -g -c akarmi.c

majd az objectfájlt kielemezteted:

objdump -d -M intel -S akarmi.o

láthatod, hogy hogyan dolgozik a fordító.

2020. jún. 12. 01:00
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:
62%

3: Ennél talán egyszerűbb, ha rögtön .asm kimenetet generáltat a fordítóval.


Amúgy, az IF egy utasítás, a haskellben is és a C-ben is. Meg minden más nyelvben.

Nem a haskell, hanem éppen a C volt az (pontosabban a nyelv alkotója), amely mindent függvényként definiált, de ez csak a szubrutinokra és a főprogramra volt igaz, önmagukban az utasításokra természetesen nem. Tehát, a C-ben nincs procedúra, nincs főprogram se, csak függvények, amelyek ha éppen nincs visszatérési értékük, akkor valójában igenis procedúrák, de hát, a hülye Ken T. - Dennis R. szerzőpáros úgy gondolta, hogy miért is ne szorozza meg a hülyeséget kettővel.


Az IF-ek gépi kódban tényleg feltételes jump-ok:

Jump if equal, vagy

Jump if Greater than,

Jump if Zero, stb.


De hát, mi mások is lennének?

2020. jún. 12. 08:37
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:
63%
Még annyit, hogy nem csak az IF-ből lesz cmp/jump szerkezet gépi kódban, de a növekményes (for), vagy az elöl- és hátultesztelő ciklusokból is.
2020. jún. 12. 08:41
Hasznos számodra ez a válasz?
 6/6 anonim ***** válasza:
63%

a=3;

b=2;

IF a>b then b=b-1;


---------------------

0000 mov AX,3

0003 mov [0400],AX

0006 mov AX,2

0009 mov [0402],AX

000C mov AX,[0400]

000F psh AX

0010 mov AX,[0402]

0013 pop BX

0014 add BX,AX

0015 or AX,AX

0016 jz 0027

0019 mov AX,[0402]

001C psh AX

001D mov AX,1

0020 mov BX,AX

0021 pop AX

0022 sub BX,AX

0023 mov [0402],AX

0027 END.

2020. jún. 12. 08:54
Hasznos számodra ez a válasz?

További 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!