【发布时间】:2016-01-23 04:20:35
【问题描述】:
考虑以下 C 程序(参见现场演示 here)。
const int main = 195;
我知道在现实世界中没有程序员编写这样的代码,因为它没有任何用处,也没有任何意义。但是,当我从程序上方删除const 关键字时,它会立即生成segmentation fault。为什么?我很想知道这背后的原因。
GCC 4.8.2 在编译时给出以下警告。
警告:'main' 通常是一个函数 [-Wmain]
const int main = 195; ^
为什么const 关键字的存在和不存在会对程序的行为产生影响?
【问题讨论】:
-
根据标准,这只是未定义的行为。
-
@machine_1 195 是 8086 及其后继操作码
ret(从函数返回)的编码。你可以猜到当你把它放在一个变量中并将该变量作为函数调用时会发生什么。 -
您是否故意选择了与
ret指令一致的值? -
@Ruslan 如果您进行一些搜索,您可以在多个地方找到此版本的各种版本。在堆栈交换网络this was one of the older references。在我对上面链接的回答中,我们可以找到一个 1984 年的 IOCCC 条目,它做了类似的事情,但要复杂得多。
标签: c segmentation-fault constants main