Üdvözletem!
Előre bocsájtom, hogy nagyjából kezdő programozó vagyok. Régebben tanultam C-t és C++-t Linux alatt.
Úgy tűnik, hogy a fordítom nem "csinál" semmit a ciklusokkal (for, while, do-while, stb). Ezt egy idő után úgy sikerült kiderítenem, hogy egyszerű pársoros progikat írtam, és egy idő után kitünt, hogy ezek nem mennek. :S
Nem rendelkezem túl nagy programozói tapasztalattal, de ilyesfélét még nem tapasztaltam. Ismétlem: kezdő vagyok. :)
Mi lehet a baj?
Előre is köszönöm, és kellemes ünnepeket mindenkinek. :)
Pótolnám a hiányosságaim, példa program:
#include
int main(void)
{
int i;
for(i=1;i<=10;i++)
{
printf("%d/n",i);
}
return(0);
}
Mondanom sem kell, hiba nélkül lefordul. Utána futásnál semmi. Ha mondjuk a for elé írok printf-et, vagy if-et, bármi más kiffejezés, ami nem ciklus, az megy. Maguk a ciklusok nem mennek. Minden más igen.
- 2966 megtekintés
Hozzászólások
Az például baj, hogy nem tetted be a működésképtelen kódot. Enélkül a válasz: Talán 5, de lehet hogy 217.
- A hozzászóláshoz be kell jelentkezni
De inkább 42.
- A hozzászóláshoz be kell jelentkezni
Lehet, bár az jobb kérdés, hogy ehető-e?!
- A hozzászóláshoz be kell jelentkezni
A válasz erre is 42!
- A hozzászóláshoz be kell jelentkezni
Az ki van zárva, mert nem tudom!
- A hozzászóláshoz be kell jelentkezni
Légyszives másolj be egy rövid kódot, amit kipróbáltál, valamint a
g++ -Wall program.cpp (C++ esetén) vagy a gcc -Wall program.c (C esetén) kimenetét.
- A hozzászóláshoz be kell jelentkezni
És ha azt kérdezi, hogy: "Jártam iskolába is és olvasni is megtanultam, de nem tudok ottohn olvasni. Ezt úgy teszteltem, hogy sem a blikk, sem lottószelvényemből nem láttam semmit." Akkor te leírod neki, hogy: "Légyszives menj a villanykapcsolóhoz, állítsad át másik állásba és tegyél be egy képet a csillárról!" ? :D
Na jó, lefekszem, mert szénné röhögtem magamat...:D
- A hozzászóláshoz be kell jelentkezni
Téged zavar, ha másnak több az érzelmi intelligenciája, mint egy kávéskanálnak?
- A hozzászóláshoz be kell jelentkezni
Ezt az intelli izét emlegetni ebben a topicban...az ön készülékében valami hiba van. Alapvető hiba. :)
- A hozzászóláshoz be kell jelentkezni
Intelligencia != Érzelmi intelligencia
Nemrég linkeltél nekem egy nagyon hasznos oldalt, szerintem ott Te is találsz információkat a kettő közötti különbségről :)
- A hozzászóláshoz be kell jelentkezni
Mit linkeltem én? Szerintem összekeversz valakivel...vagy nem emlékszem.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
nincs különösebb kimenet. :S Lefordul és semmit nem ad vissza. Segítségetek előre is nagyon köszönöm.
- A hozzászóláshoz be kell jelentkezni
Nem lehet, hogy az a probléma, hogy nem flush-ölöd a képernyőre írást?
Próbáld ezzel a printf-fel:
printf("%d\n",i);
- A hozzászóláshoz be kell jelentkezni
i<=10 kellene szerintem a for-ba feltételnek i==10 helyett.
- A hozzászóláshoz be kell jelentkezni
nem lep be a ciklusba, mert a ciklusfeltetel nem igaz (i==10) keztedben (i=1). szerintem te i!=10 -et akarsz
- A hozzászóláshoz be kell jelentkezni
for(i=1;i==10;i++)
A logikai feltételed sose teljesül, a helyes i<=10. vagy kezdetben i=10.
- A hozzászóláshoz be kell jelentkezni
uhh, igazatok van! Röktönzött kis példaprogramom nem jó! Kijavítottam, úgy sem megy. De mondjuk egy végtelen while ciklus sem megy. Rengeteg ilyen apró kis próba programmal probálkoztam, de semmi. :(
- A hozzászóláshoz be kell jelentkezni
#include után stdio.h
és a printf-ben / > \
- A hozzászóláshoz be kell jelentkezni
Szerintem tudja ezt ő is, csak mivel nem tette a kódot [ code ] -tagek közé, a forúmmotor kiszedte ezeket.
- A hozzászóláshoz be kell jelentkezni
Igen, köszönöm. :)
- A hozzászóláshoz be kell jelentkezni
Akkor viszont le kell fordulnia és futnia is kell. (Nálam legalábbis ezt tette.)
- A hozzászóláshoz be kell jelentkezni
Egyetértek. Ez egy teljesen egyszerű példa, ha ez nem fordul, akkor ott valami komoly probléma van.
bazsig: Hanyas verziójú gcc-vel próbálod fordítani?
- A hozzászóláshoz be kell jelentkezni
Lefordul, csak nem megy jól.
gcc (Debian 4.3.2-1.1) 4.3.2
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- A hozzászóláshoz be kell jelentkezni
Óóóó, köszi, hogy ennyire segítőkészek vagytok! Nálam is lefordul hiba nélkül, a program le is fut, csak épp hogy azt nem csinálja ami a ciklus blokban van benne. Sima egyedülálló kifejezéseket végre hajt.
- A hozzászóláshoz be kell jelentkezni
Most mi a gond? Az a kód, amit bemásoltál (stdio.h-val megspékelve), például nálam (gcc version 4.4.5 (Debian 4.4.5-8)) lefordul és fut is, kiírja a számokat 1-től 10-ig. Hogyan tudnánk még segíteni? Ennyi információból ennyit lehet kihozni. Nem hiszem, hogy gcc 4.3.2 ilyen egyszerű kódnál radikálisan másként működne ...
- A hozzászóláshoz be kell jelentkezni
Jaaaj, ne értsetek félre, tényleg örülök, hogy segítettek. :D Így vissza olvasva az előző válaszomat, kétség kívül más tonalitásban is lehetne értelmezni, de nem úgy szántam. Bocsi. :$ :)
Amúgy én még annyira sem értem, h mi lehet a gond. :S Most megpróbálok debugolni, vagy mi. :)
- A hozzászóláshoz be kell jelentkezni
Bocsi. :$ :)
OK, semmi gond!
- A hozzászóláshoz be kell jelentkezni
#include <stdio.h>
int main(void)
{
int i;
for(i=1;i<=10;i++)
{
printf("%d\n",i);
}
return(0);
}
a fájl neve: hup.c
gcc hup.c -o hup
chmod +x hup
./hup
parancsokkal fordítva, futási jogot adva, futtatva ezt írja ki:
1
2
3
4
5
6
7
8
10
gcc version 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2) -val fordítottam,
kiegészítve az #include sor a <stdio.h> -val, valamint a printf sorban a /n helyett \n a vezérlő karakter.
gy
- A hozzászóláshoz be kell jelentkezni
Nagyon köszönöm a segítségetek! :) Végül is egy gcc újra telepítés megoldotta a problémámat. Bár elötte is próbáltam ezt, akkor nem ment. Nem tudom mi hozhatta rendbe. :S Lényeg, most úgy tűnik, hogy működik. Tényleg köszönöm! :D
Mindenkinek Boldog Karácsonyt és Új évet kívánok.
Üdv BazsiG! :)
- A hozzászóláshoz be kell jelentkezni
Valami baj lehet a fordítóval, mert szerintem 9-et is ki kéne írnia..
Software is like sex, it's better with a penguin. :D (r)(tm)(c) آكوش
- A hozzászóláshoz be kell jelentkezni
The famous "number sequence without 9" bug aka "gappy paste" bug. ;)
- A hozzászóláshoz be kell jelentkezni
;) kösz, hogy megmagyaráztad... :D
Software is like sex, it's better with a penguin. :D (r)(tm)(c) آكوش
- A hozzászóláshoz be kell jelentkezni
Hello,
legközelebb ha ilyen gondod akad...
gcc-nek add meg a -ggdb kapcsolót, aztán gdb-vel nézd meg mi történik.
kb így, de a google és man a barátod....
gdb a.out
aztán érdekes dolgokat lehet jól megnézni ugye... de most talán nem másolom be az egész man page-t... A fontos a jelen problémádnál a disassemble lett volna...
Üdv, P.
- A hozzászóláshoz be kell jelentkezni
+1 gdb, és a valgrind. Mind a két program nagyon jól használható. Valgrindet én memóriaszivárgás vadászatára használtam.
------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.
- A hozzászóláshoz be kell jelentkezni
ugy altalaban, pa'r praktikus jotanacs c fejleszte'shez, kezdoknek is:
- forditas: `gcc -Wall -pedantic -ansi -O3 -D_GNU_SOURCE -fPIC`, sima `gcc` helyett.
- forditas soran egyetlen warning se legyen. azaz 0 darab. olyat nem jatszunk hogy kiir a fordito valami warningot, oszt utana megyunk erdeklodni (forumokra, barhova) hogy "vajh miert nem megy?". ha van warning, akkor rtfm, mi is az, kijavit, stb. persze a fenti kapcsolokkal. kesobb ezen me'g lehet hangolni, persze, ez egy mas kerdes. illetve a 0 warning az meg mindig nem azt jelenti hogy a program azt csinalja amit hiszu"nk, de igy all hozza' altalaban a legkozelebb.
mondjuk pont a kerdezo" kollega eseten ezek nem hoztak volna elo" semmit, murphy torvenyei szerint ;) (mmint ami az eredeti valtozatot illeti, ott sem), de ettol fuggetlenul sok esetben hasznosak.
- A hozzászóláshoz be kell jelentkezni
A -O3 az biztos? -O2 tudtommal stabilabb. -O3 képes vicces dolgokat művelni.
- A hozzászóláshoz be kell jelentkezni
Sőt, ha valami nagyon paranormális dolgot csinál a bináris, akkor érdemes -O0-lal fordítani.
- A hozzászóláshoz be kell jelentkezni
... hat, szerintem meg inkabb keressuk meg es javitsuk ki a hibat ;)
- A hozzászóláshoz be kell jelentkezni
+1, de ez ma már nem divat. Sajnos.
- A hozzászóláshoz be kell jelentkezni
-O3 képes vicces dolgokat művelni.
igen, ha a program hibas ;) magyaran, az -O3 jobban elohozza a rejtettebb/alattomosabb hibakat (biz. feltetel-rendszer eseten nem inicializalt valtozok, to"mb ala/tulcimzesek, tobbszoros indirekciok eseten fellepo hulyesegek, stb.).
- A hozzászóláshoz be kell jelentkezni
Azért érdemes néha azt a "-O3"-at "-O0 -g"-re cserélni.
Jut eszembe, gcc tud olyat, hogy alapból feltölti a változókat valamilyen értékkel, ami nagy valószínűséggel rögtön nyilvánvalóvá teszi, hogy nem lett inicializálva? (0xBAADF00D) (Mint a Visual C++ fordítója debug módban.)
Vagy a valgrind kiabál ilyenkor? (Sajnos winre nincs, úgyhogy még nem volt alkalmam használni ezt a csodát...)
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
Vagy a valgrind kiabál ilyenkor? (Sajnos winre nincs, úgyhogy még nem volt alkalmam használni ezt a csodát...)
ez jo kerdes, automatikus valtozo olyan teruleten van, hogy annak inicializalatlan eseteben kivetel vagy barmi ilyesmi elegge nehezen ke'rheto".
viszont ezekre a fordito altalaban szokott szolni, merthogy az inicializalatlansag ma'r forditasi idoben is ellen (-Wuninitialized, a -Wall is bekapcsolja ezt). ujabb gcc-knel ma'r tenyleg elegge nyakatekert elrendezes kell legyen, de azt is alt "false positive"-kent ertekeli ki. ilyenkor atnezed kezzel, megnyugodsz, es adsz valami kezdeti erteket, vagy beleteszel egy "else" a'gat, pl., amirol tudod hogy sosem fog lefutni (olyanok az input parameterek), es ott beleteszel egy =0 ertekadast, vagy barmi (a forditot megnyugtatja, kb, ennyi).
statikus es kulso valtozokra meg nyilvan ertelmetlen a kerdes, by szabvany.
a
- A hozzászóláshoz be kell jelentkezni
> ...beleteszel egy "else" a'gat, pl., amirol tudod hogy sosem fog lefutni (olyanok az input parameterek), es ott beleteszel egy =0 ertekadast, vagy barmi (a forditot megnyugtatja, kb, ennyi).
És kíváncsian várod, milyen reakciókat vált ki az alábbi megjegyzés:
/* This block will never be reached, it is included only to suppress some warnings. */
:))
--
Debian - The "What?!" starts not!
http://nyizsa.uni.cc
- A hozzászóláshoz be kell jelentkezni
hulye pelda:
#include <stdio.h>
int funct(int a)
{
int c;
if ( 0<a )
c=1;
else if ( a<0 )
c=2;
return(c);
}
int main(int argc,char *argv[])
{
int x;
x=3;
printf("%d\n",funct(x));
return(0);
}
ha a funct ele' beleteszel egy static-ot, akkor nem ad figyelmeztetest. viszont ha x=3 helyett mondjuk x=argc+1-et adsz meg, amirol tudod hogy sosem lehet nempozitiv, akkor is ad figyelmeztetest a funct().
- A hozzászóláshoz be kell jelentkezni
Kipróbáltam, kivettem az else ágat, -Wall kapcsolóval semmi. Az alábbi példát is, kivettem a case:3-at, szintén semmi. -Wuninitialized kapcsolóval sem. Most már kezd érdekelni, mire gondolsz. Amúgy az előző hozzászólás csak poén akart lenni.
--
Debian - The "What?!" starts not!
http://nyizsa.uni.cc
- A hozzászóláshoz be kell jelentkezni
kell a -O2 is, csak akkor panaszkodik.
- A hozzászóláshoz be kell jelentkezni
Aha, megvan. Mondjuk nekem szimpatikusabb az a megoldás, hogy minden változónak adok értéket deklaráció után, mint else ágak berakása.
--
Debian - The "What?!" starts not!
http://nyizsa.uni.cc
- A hozzászóláshoz be kell jelentkezni
vagy egy sokkal egyszerubb es talan hetkoznapibb pelda:
int funct(int a)
{
int c;
switch ( a&3 )
{ case 0: c=10;break;
case 1: c=20;break;
case 2: c=30;break;
case 3: c=40;break;
}
return(c);
}
- A hozzászóláshoz be kell jelentkezni
Just FYI: -Werror
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
ja, jo lehet az is, de 1/ fejleszte's mellett ugyis csak 1-2 modult forditasz egyszerre, akkor meg egyszeruen latod mit ir ki 2/ ha masnak odaadod a kodot, hogy hasznalgassa, es ez bennemarad, akkor elohozhat olyan warn-okat ami igazabol nem is azok (pl egy arnyalatnyival mas verziojo gcc f+ ertek egy -Wunitilalized esetet, lasd feljebb; de akar sima std-kkel kapcsolatos figyelmeztetesek is lennek: neha ugy erzem hogy +1 minor verzio es megvaltozik a c89-es std is ;]). na es akkor az emberke rinyal hogy ``szar a program, meg le sem fordul'' ;]
- A hozzászóláshoz be kell jelentkezni
esetleg még "-W -Wall -Wextra -Wconversion -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wformat=2 -Wformat-security -fshort-enums [ezt ésszel] -fno-common -ggdb"
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
Erdekelne mit miert ajanlasz...
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
-Wall -Wextra
eleg sok dologra szolnak, ami szerintem common typo jelleggel rontanak el
-Wshadow
sok kezdo beszopja az "ugynaolyan nevu lokalis elnyomja a globalist" dolgot. Tudom, ne globalisozzanak...
-Wpointer-arith
beszol a gyanus pointer-aritmetikara (pl. delikvens ugy akar int*-bol unsigned int*-ot csinalni, hogy void*-ra at, majd onnan tovabb)
-Wcast-qual
pl. "const" eltuntetese tipuskenyszeritessel, majd siras, hogy "demérnemengedipedig" ellen
-Wcast-align
ugyancsak gyanus aritmetikara figyel
-Wwrite-strings
stringkonstansok baszkuralasa ellen meg forditasidoben
-Waggregate-return
ez igazabol csak figyelmeztetes, de sokan elbuknak azon, hogy pl. ha int* a visszateresi ertek akkor azt hiszik az egy int, kozben az egy 1D int tomb is lehet...
-Waggregate-return
pl. regi tipusu argumentumlista ellen.
-Wformat=2
http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Warning-Options.html#index-…
-fno-common
http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Code-Gen-Options.html#index…
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
-Wpointer-arith
ez szerintem akkor szól be, ha a void *-ot char *-ként próbálja a delikvens kezelni (azaz hozzáadni, kivonni, indexelni, sizeofolni próbál), ami abszolút jogos.
- A hozzászóláshoz be kell jelentkezni
Szükséges a -Wshadow -t külön használni?
Én általában -Wall -t használom, de így is mindig kiabál ha ilyesmi van.
- A hozzászóláshoz be kell jelentkezni
úgy emlékszem, régen nem volt része a -Wall -nak, azért van külön is.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
na, megfelel?
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
Igen, erdekes dolgokat irsz, par kapcsolot biztos hasznalni fogok kodolas soran. Nincs turelmem a GCC haboru es beke hosszusagu kezikonyvet elolvasni. Koszonom a rovid osszefoglalot.
Bocsi a kesei valaszert, de nem mindig nezem at az osszes feliratkozott topicot.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
köszi, nekem tetszik.
- A hozzászóláshoz be kell jelentkezni
Hahó!
A többi hozzászólóval ellentétben én egy másik utat javaslok, nem a gcc kapcsolóit.
Próbáld meg telepíteni az splint programcsomagot -- a klasszikus UNIX terminológiában ez a ,,lint'' program -- amely arra szolgál, hogy a C forrásprogramokban a rejtett hibákat megjelenítse. Nem fordít, csak elemez.
G.
============================================
"Share what you know. Learn what you don't."
- A hozzászóláshoz be kell jelentkezni
könyvjelző
--
unix -- több, mint kód. filozófia.
Life is feudal
- A hozzászóláshoz be kell jelentkezni
Lehet hogy hülyeség, de megpróbálhatnád üres .bashrc és .bash_profile fájlok mellett futtatni a progit.
(Persze ne töröld, csak tedd félre :))
- A hozzászóláshoz be kell jelentkezni
env -i
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni