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