Τι θα συμβεί όταν μεταγλωττίσουμε και τρέξουμε καθένα από τα δύο προγράμματα; Σε ποιο στάδιο (μεταγλώττιση ή εκτέλεση) εμφανίζεται το πρόβλημα, και γιατί;
const1.c:
const char message[] = "Hello";
int main() {
const int x = 42;
const char const * msg_ptr = message;
x++;
return 0;
}
const2.c:
const char message[] = "Hello";
int main() {
const int x = 42;
char * bad = (char*)message;
bad[1] = 'o';
return 0;
}
Στο πρώτο πρόγραμμα, ο μεταγλωττιστής ξέρει ότι το x είναι const: τι θα κάνει
με το x++; Στο δεύτερο, το cast κρύβει το const από τον μεταγλωττιστή, όμως ο
πίνακας message εξακολουθεί να βρίσκεται σε μνήμη που προορίζεται μόνο για ανάγνωση.
Αριθμός στον οδηγό: Α23.3
(στο κεφάλαιο) ·
Μόνιμο αναγνωριστικό: slides-lec23-const-violations ·
Σύνδεσμος: https://progintro.github.io/study/questions/slides/slides-lec23-const-violations.html ·
Markdown (GitHub)