2017-06-08 42 views
1

下面的代碼編譯並按我的預期運行。通過指針修改一個const限定對象

#include <stdio.h> 

int main(void) { 
     const char  C1 = '1'; 
     char const  C2 = '3'; 

     printf("%c %c", C1, C2); 

     char *pC1 = &C1; *pC1 = 'H'; 
     char *pC2 = &C2; *pC2 = 'o'; 

     printf("%c %c", C1, C2); 

     return 0; 
} 

此代碼調用未定義的行爲?

+3

如果啓用警告/錯誤,此代碼**不會**編譯:http://ideone.com/df4xiC –

+2

在一天結束時,您仍然在修改「const」。是的,這是UB。 –

+0

這個代碼*必須*給你一個診斷,因爲'&C1'和'pC1'不兼容。在C中,診斷是錯誤的。 –

回答

5

是的,這段代碼調用未定義的行爲。根據C標準,

如果嘗試通過使用非const限定類型的左值來修改用const限定類型定義的對象,則行爲是未定義的。

相關問題