Οδηγός Μελέτης - Εισαγωγή στον Προγραμματισμό

Α23.3 · Αλλάζοντας κάτι const

Διάλεξη 23, διαφάνειες 23-24 · Δυσκολία ★★☆ · trace · Κεφάλαια: 23

Τι θα συμβεί όταν μεταγλωττίσουμε και τρέξουμε καθένα από τα δύο προγράμματα; Σε ποιο στάδιο (μεταγλώττιση ή εκτέλεση) εμφανίζεται το πρόβλημα, και γιατί;

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)