【发布时间】:2014-01-27 03:46:31
【问题描述】:
以下示例使我的理解更加混乱。我无法理解如何修改 const 变量 local。请帮助我理解相同的内容。
/* Compile code without optimization option */
// volatile.c
#include <stdio.h>
int main(void)
{
const int local = 10;
int *ptr = (int*) &local;
printf("Initial value of local : %d \n", local);
*ptr = 100;
printf("Modified value of local: %d \n", local);
return 0;
}
$ gcc volatile.c -o volatile –save-temps
$ ./volatile
本地初始值:10
local的修改值:100
【问题讨论】:
-
至于“怎么可能”,那是因为你故意通过非
const指针改变它来颠覆它的constness,而你的编译器没有选择放置它在只读内存中或做其他只会导致严重失败的事情。 -
那么,这是否意味着编译器出错了?它应该有警告
-
不,这意味着你错了。话虽如此,如果您实际上通过在命令行中添加
-std=c99 -pedantic -Wall将编译器警告提高到合理的水平,我的钱说 gcc 会警告您。 -
不,因为它也可以 - 并且更容易 - 通过首先不声明
const来更改值。这是你的程序,没有其他人能够改变这些值,除非你给他们一种方法,或者除非他们修改了你无能为力的可执行文件。真正的安全漏洞是一开始就在程序中保留用户名和密码。