C++ μυστήριο

Θοδωρής Λύτρας thlytras at gmail.com
Wed Sep 17 14:57:39 EEST 2008


Θα ήθελα να μοιραστώ μαζί σας το παρακάτω μυστήριο:

Παρατήρησα οτι η εφαρμογούλα που φτιάχνω σε C++ / Qt4 είχε ΔΙΑΦΟΡΕΤΙΚΗ 
συμπεριφορά όταν την εκκινούσα από κονσόλα από ότι όταν την εκκινούσα 
κλικάροντας το εικονίδιο του εκτελέσιμου μέσα από τον konqueror.

Ύστερα από debugging, εντόπισα το πρόβλημα σε ένα if statement το οποίο έλεγχε 
μια μεταβλητή bool, η οποία όμως δεν είχε αρχικοποιηθεί σε false. 

if (myBool)
	...	//is true
else
	...	//is false

Όταν το πρόγραμμα έτρεχε από κλικ, γινόντουσαν όσα έπρεπε να γίνουν σε 
περίπτωση false, όπως ακριβώς το ήθελα, παρ'ότι η μεταβλητή δεν είχε αρχική 
τιμή. Όταν το πρόγραμμα έτρεχε από κονσόλα, δε γινόταν απολύτως τίποτα από τα 
δύο!

Now I know οτι όλες οι μεταβλητές πρέπει να έχουν αρχική τιμή, και το πρόβλημα 
λύθηκε όταν στον constructor της κλάσης έδωσα αρχική τιμή στη μεταβλητή. 

Το ερώτημα όμως είναι: γιατί το πρόγραμμα, ενώ έχει compilαριστεί με τον ίδιο 
ακριβώς τρόπο (g++) να εκτιμά διαφορετικά την μη αρχικοποιημένη bool 
μεταβλητή ανάλογα με το αν ξεκινά από κονσόλα ή με click από konqueror??? 
Και, ποιά είναι η "φυσιολογική" συμπεριφορά από τις 2? (Υποθέτω της 
κονσόλας... λιγότερο fault-tolerant)

Θοδωρής


-- 
"Beauty is transitory"
"Beauty survives"
        - Mr. Spock & Capt. Kirk, "That which survives", stardate unknown
by Theodore Lytras <thlytras at gmail.com>


More information about the Linux-greek-users mailing list