注意在现在的gcc中, const可能会被用指针绕过。
linux:
#include "stdlib.h" #include <stdio.h> int t1() { const int ii = 1234; printf("ii = %d ", ii); // error C2440: “初始化”: 无法从“const int *”转换为“int *” int* p = ⅈ (*p) = 444; printf("ii = %d ", ii); return 0; } /* root@oucaijun:/work/dcc# gcc 1.c ;./a.out ii = 1234 ii = 444 */
vs2010不会被绕过:
// demo.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "stdlib.h" #include <stdio.h> int _tmain(int argc, _TCHAR* argv[]) { const int ii = 1234; printf("ii = %d ", ii); // error C2440: “初始化”: 无法从“const int *”转换为“int *” int* p = ⅈ (*p) = 444; printf("ii = %d ", ii); return 0; }