2013-08-02 12 views

Odpowiedz

3

Kiedy robisz *p=20, próbujesz zmienić wartość stałej, co jest niedozwolone.

15

Czy można wyprowadzać 10 lub 20, w zależności od kompilatora?

Tak, mogą pojawić się nawet demony nosowe. Zachowaniem tego programu jest niezdefiniowana, kod jest źle sformułowany, ponieważ modyfikowanie obiektu const jest naruszeniem ograniczeń.

+2

+ dla "naruszenia ograniczeń" jest wywołane const-constraint - lubię poprawne terminologie . –

+0

@GrijeshChauhan Niepowiązane: dzięki za linki dupe. –

+0

@ H2CO3 Wiele razy czytałem te odpowiedzi. W przeszłości miałem takie samo zamieszanie. właściwie pytanie jest dobre i oczywiste. –

11

Jak napisano, Twój kod ma niezdefiniowane zachowanie, więc tak, możesz uzyskać 10 lub 20 lub cokolwiek innego (np. Naruszenie dostępu).

6

To niezdefiniowane zachowanie:

C11 6.7.3 Rodzaj kwalifikacyjne

Jeśli nastąpi próba modyfikacji obiektu zdefiniowane z typem const wykwalifikowana poprzez wykorzystanie z lwartością z const -kwalifikowany typ, zachowanie jest niezdefiniowane. Jeśli próba jest wykonana na obiekcie zdefiniowanym za pomocą typu z lotnością kwalifikowaną, przy użyciu wartości LV z typem nieulotnym, zachowanie jest niezdefiniowane.

6

Tak, to jest niezdefiniowane zachowanie, i myślę, że to jest to, co mówi o tym.

C99 6.7.3 Punkt 5

Jeżeli próbuje się zmodyfikować przedmiotu zdefiniowanego w const wykwalifikowana rodzaju dzięki zastosowaniu lwartością z const wykwalifikowana typu, zachowanie jest niezdefiniowane. Jeśli próbuje się odnosić do obiektu zdefiniowanego z rodzajem ulotnej wykwalifikowana poprzez wykorzystanie lwartością z nieulotną wykwalifikowanej typu zachowanie jest undefined.115)

Powiązane problemy