Kezdőoldal » Számítástechnika » Programozás » C++: A short és long típusmódo...

C++: A short és long típusmódosítók hogyan módosítják a tárolási hosszat pontosan? Az auto, register, extern stb ezek tárolási osztályok ugye?

Figyelt kérdés
Hálás lennék erre a két kérdés válaszára, Üdv
2012. szept. 3. 18:34
 1/4 iostream ***** válasza:
100%

A short nem lehet hosszabb, mint az int, a long pedig nem lehet rövidebb, mint az int.

Az auto, extern nem tárolási osztályok, hanem kulcsszavak.

A register kulcsszó valóban a register tárolási osztályt adja a változóhoz.

Ezen kívül van még három tárolási osztály, ami közül az external szorosan összefügg az extern kulcsszóval.

Az auto kulcsszó az automatic tárolási osztályra utal, de teljesen felesleges, ugyanis minden blokkváltozó automatikus by default. Meg felül is lett vágva C++11-ben.

2012. szept. 3. 19:20
Hasznos számodra ez a válasz?
 2/4 A kérdező kommentje:

Ezt a short/long-ot kifejtenéd pls kcisit részletesebben mert nem teljesen tiszta, a könyv pedig semmit nem hoz róla? :S



A másik, a könyvem "Programozzunk C/C++ nyelven!" (ez 2 könyv, mindkettőben betűről-betűre ugyanaz szerepel:


"A deklarációban a típust megelőzheti néhány alapszó (auto, register, static vagy extern) amelyek az objektum tárolásával tartalmaznak előírásokat. Az előírások, amiket tárolási osztálynak nevezünk, meghatározzák az objektum elhelyezkedését, láthatóságát és élettartamát. Minden változóhoz tartozik tárolási osztály, még akkor is, ha azt külön nem adtuk meg. Ha a változót függvényeken kívül definiáljuk, akkor alapértelmezés szerint globális (más modulból elérhető) tárolási osztállyal rendelkezik, míg a függvényeken belül definiált változók alaphelyzetben automatikus (auto) változók."


A félreértést az első mondat vége és a második mondat eleje okozza:


"tartalmaznak előírásokat. Az előírások, amiket tárolási osztálynak nevezünk"


Tehát akkor:


- a tárolási osztályokat a változó definíciója elé szükséges elhelyezni

- a változó definíció elejére elhelyezhetünk kulcsszavakat amelyek a változó tulajdonságait "módosíthatjuk", egészen pontosan a tárolással kapcsolatosan (memóriaterületen való eltárolás ugye?), de ezek NEM tárolási osztályok

- ha a definíció tartalmaz tárolási osztályt illetve a fenti kulcsszavak egyikét is, akkor szigorúan először a tárolási osztályt, kulcsszót és a definíció többi részét adjuk meg ugye?


A fenti pontok illetve részei igazak, tehát jól értem ugye?


Nagyon köszönöm a válaszodat.


Üdv

2012. szept. 3. 21:26
 3/4 iostream ***** válasza:
100%

A short/long témáról nincs sokat mondani. C/C++-ban nincs egzakt mód megadva a típusok mérete, annyit tudunk, hogy a char mérete 1, és hogy a short, int, long méret alapján vett rangsora nem borulhat (meg még néhány egyéb részletet, de igazán részlet-részlet).

1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)


"- a tárolási osztályokat a változó definíciója elé szükséges elhelyezni"


Csak ha meg akarod változtatni az alapértelmezettet. Blokkon belül minden változó automatikus alapból (azaz a vermen jön létre, és az élettartama a blokkhoz kötött), azon kívül statikus (azaz a statikus tárterületen jönnek létre, és az élettartamuk (a vége biztos, az eleje változhat, pl függvény statikus változója) a programéhoz kötött).


"- a változó definíció elejére elhelyezhetünk kulcsszavakat amelyek a változó tulajdonságait "módosíthatjuk", egészen pontosan a tárolással kapcsolatosan (memóriaterületen való eltárolás ugye?), de ezek NEM tárolási osztályok"


A változó tárolási osztályát adhatod meg ezzel, de magukat a tárolási osztályokat nem úgy hívjuk. Kivéve az automatikus, amihez már nem tartozik kulcsszó. Valamint ezek a kulcsszavak azt is megadhatják, hogy a név linkelése milyen legyen: blokkon kívül a static alapvetően azt okozza, hogy lokális lesz a név, azaz ha több fordítási egységben is szerepel, nem akad össze, viszont nem is éred el a másik fordítási egységből, konstansoknál, amik alapból így viselkednek az extern kulcsszó teszi őket elérhetővé másik fordítási egységből.


"- ha a definíció tartalmaz tárolási osztályt illetve a fenti kulcsszavak egyikét is, akkor szigorúan először a tárolási osztályt, kulcsszót és a definíció többi részét adjuk meg ugye?"


A tárolási osztály nem része a nyelvtannak, csak a kulcsszavak. Tehát ez a két dolog egy és ugyanaz ilyen értelemben. Csak mivel a static, extern és auto kulcsszavakat másra (is) használjuk, ezért fontos megkülönböztetni magát a kulcsszót és a tárolási osztályt. Meg ahogy fentebb említettem, a const kulcsszó is befolyásolja ezeket (csak a linkelést, de emiatt alkalmazhatsz más kulcsszavakat (extern)).

Az, hogy milyen sorrendben lehet őket megadni, nem tudom. Próbáld ki.

2012. szept. 3. 21:55
Hasznos számodra ez a válasz?
 4/4 A kérdező kommentje:
Nagyon köszönöm a válaszodat, Üdv
2012. szept. 4. 16:27

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!