User Tools

Site Tools


qna:misc:compilation:unreachable-code

Unreachable code

Κάποιες φορές, είτε στον editor του IDE, είτε στα μηνύματα του compilation μπορεί, το CLion να σας δείξει για κάποιο κομμάτι του κώδικα ότι είναι “Ureachable code”, δηλαδή “Μη προσπελάσιμος κώδικας”. Μάλιστα στον editor ο κώδικας αυτός εμφανίζεται αχνός (γκριζαρισμένος).

Προσέξτε! Δεν είναι όλα τα αχνά κείμενα στον editor, unreachable code.

Αυτό σημαίνει ότι ο κώδικας αυτός δεν πρόκειται να εκτελεστεί ποτέ, ανεξαρτήτως των συνθηκών (πχ δεδομένων τιμών κλπ). Μερικές φορές αυτό είναι εξόφθαλμο, όπως στο παρακάτω παράδειγμα:

int main() {
    printf("First one!\n");
    return 0;
    printf("Second one!\n");   // αυτή η γραμμή δεν θα εκτελεστεί ποτέ
}

Το δεύτερο printf δεν μπορεί να εκτελεστεί ποτέ, καθώς θα έχει εκτελεστεί πρώτα η return που τερματίζει την εκτέλεσης της συνάρτησης.

Υπάρχουν όμως και περιπτώσεις που αυτό δεν είναι τόσο εμφανές. Η πιο απλή είναι προκύπτει από ένα απλό σφάλμα (είτε τυπογραφικό, είτε κατανόησης. Δείτε τον ακόλουθο κώδικα.

    int x = 10;
    if (x=5) {
        printf("One!\n");
    } else {
        printf("Two!\n");   // αυτή η γραμμή δεν θα εκτελεστεί ποτέ
    }

Εδώ είναι λανθασμένη η συνθήκη του if, που έχει μονό = αντί για διπλό, ==, οπότε η παράσταση x=5 σημαίνει να δοθεί η τιμή 5 στη μεταβλητή x και έχει ως αριθμητικό αποτέλεσμα 5, το οποίο ως μη μηδενική τιμή, θεωρείται από την if ως αληθής (true), οπότε πάντα εκτελείται η πρώτη printf και ποτέ η δεύτερη. Γι'αυτό και το CLion προειδοποιεί σχετικά.

qna/misc/compilation/unreachable-code.txt · Last modified: 2021/03/22 19:01 by xallos