【发布时间】:2013-02-28 02:01:11
【问题描述】:
#include <stdio.h>
void inc(int* p) {
*p = *p + 1;
}
int main() {
const int a = 10;
inc(&a);
printf("%d\n",a);
}
上面的程序编译没有任何错误,输出为 11,因为局部变量 'a' 进入堆栈。
所以我的问题是:
- 为什么“a”进入堆栈。我期待它进入 .rodata 部分。但为什么没有呢?
- 如果我将 'a' 声明为全局常量变量,它会进入 .rodata 部分。
这让我很开心!!
【问题讨论】:
-
C 标准允许对 const 变量进行变异。使用 C++ 编译器会出现编译器错误。
标签: c compiler-construction constants elf