Kezdőoldal » Számítástechnika » Programozás » C nyelven a konstans deklarálá...

C nyelven a konstans deklarálásnak vannak szabályai? Optimalizálás esetén kiveszi a tömböt a lefordított forrásból.

Figyelt kérdés

Deklaráltam egy sokezer elemet tartalmazó tömböt a következő képpen:

long tomb [150000]= {

...

...

};

Ilyen módon deklaráltam. Tesztelni szeretnék valamit, azért a nagy tömb... Normális, hogy az optimalizálás módosítja a kódot?

Ubuntu alatt GCC már a -O2 kapcsoló hatására is ezt teszi.



2015. jan. 23. 16:23
1 2
 1/14 A kérdező kommentje:
Mielőtt még valaki szóvá teszi, "a lefordított binárisból" veszi ki. :-)
2015. jan. 23. 16:28
 2/14 anonim ***** válasza:

"Normális, hogy az optimalizálás módosítja a kódot?"


Igen, ez a célja a gépi utasításokat csökkentheti növelheti. Nem értek mindent pontosan, hogyan használod a tömböt a programban?

2015. jan. 23. 17:02
Hasznos számodra ez a válasz?
 3/14 A kérdező kommentje:

For ciklussal megyek, i 0-tól n-1-ig

j pedig i+1-től n-ig.

Cserélgeti az elemeket, elején végén kiírja az időt, ennyi történik.

2015. jan. 23. 17:05
 4/14 A kérdező kommentje:

Tehát tomb[i] cserélve tomb[j]

Ezen kívül és hogy elején, végén kiírja az időt, nem tesz mást.

2015. jan. 23. 17:06
 5/14 anonim ***** válasza:

És mi a kérdés?

C-ben nincs konstans egyébként.

2015. jan. 23. 17:18
Hasznos számodra ez a válasz?
 6/14 A kérdező kommentje:

A kérdés, hogy miért vágja ki a binárisból a tömböt. Jó akkor nem konstans, hanem előre feltöltött tömb...


Most nem tudom kipróbálni, nincs a közelemben C fordító, de olyan warning üzenet volt, hogy "array excess of element"...

Kicsit bizonytlaan vagyok hogy a két ciklus meddig menjen, mert még kezdő vagyok és hogy jó -e ez így...

tehát a tomb változó 150000 elemű.

for(i=0; i<150000;i++){

for(j=i+1; j<150001;j++){

if (tomb[i]<tomb[j]) {

cs=tomb[i];

tomb[i]=tomb[j];

tomb[j]=cs;

nem tetszett neki az sem, ha i 0-tól 149999-ig, j pedig i+1-től 150000-ig ment...

2015. jan. 23. 17:23
 7/14 anonim ***** válasza:
Te nem használod a tömböt (értelmesen). A fordító annyit lát csinálsz egy nagy halom értelmetlen munkát és ezt kiveheti C-ben. Mérés után menj végig a tömbön és írd ki, akkor nem optimalizálhatja.
2015. jan. 23. 17:24
Hasznos számodra ez a válasz?
 8/14 anonim ***** válasza:
Azért, mert a j indexeli túl a tömböt, amikor 150000 lesz.
2015. jan. 23. 17:26
Hasznos számodra ez a válasz?
 9/14 anonim ***** válasza:

Rosszak a határok, szerintem túlcímzel. Helyesen így lenne


for(i=0; i<150000-1;i++){

for(j=i+1; j<150000;j++){

2015. jan. 23. 17:28
Hasznos számodra ez a válasz?
 10/14 A kérdező kommentje:

Ezek szerint akkor ha

for(i=0; i<149998;i++){

for(j=i+1; j<149999;j++){

Itt ebben az esetben <= jelet nem kell használni?


Ekkor tökéletesnek kell lennie?

2015. jan. 23. 17:30
1 2

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!