【发布时间】:2012-12-11 19:28:42
【问题描述】:
我发现了 Arthur Whitney 的这幅令人惊叹的作品 - http://www.jsoftware.com/jwiki/Essays/Incunabulum
编译时有一些警告
$ gcc-4.7 incuna.c -o incuna.o
incuna.c: In function 'ma':
incuna.c:8:15: warning: incompatible implicit declaration of built-in function 'malloc' [enabled by default]
incuna.c: In function 'pi':
incuna.c:26:7: warning: incompatible implicit declaration of built-in function 'printf' [enabled by default]
incuna.c: In function 'nl':
incuna.c:26:24: warning: incompatible implicit declaration of built-in function 'printf' [enabled by default]
incuna.c: In function 'pr':
incuna.c:28:10: warning: incompatible implicit declaration of built-in function 'printf' [enabled by default]
incuna.c: In function 'ex':
incuna.c:35:36: warning: assignment makes integer from pointer without a cast [enabled by default]
incuna.c:35:25: warning: return makes pointer from integer without a cast [enabled by default]
incuna.c: In function 'noun':
incuna.c:37:57: warning: return makes integer from pointer without a cast [enabled by default]
incuna.c: In function 'wd':
incuna.c:39:21: warning: incompatible implicit declaration of built-in function 'strlen' [enabled by default]
但在输入基本输入 1 + 1 时出现段错误。
./incuna.o
warning: this program uses gets(), which is unsafe.
1 + 1
[1] 11525 segmentation fault ./incuna.o
我猜这与自 1989 年以来 C 编译器的差异有关。
我将如何运行它?我可以在最近的 Linux/Mac 上使用它吗?还是在 VirtualBox VM 上?还是别的什么?
我的 Google 搜索结果没有任何相关内容。
【问题讨论】:
-
也许您可以尝试在 gdb 中运行该程序以查看更多信息?
-
#include <stdio.h>也许?编辑:更正语法 -
这看起来像是由于 gets() 导致的缓冲区溢出
-
1+1没有段错误。只是觉得你应该知道。 -
@leppie,添加它,结果相同。
标签: c gcc compiler-construction vm-implementation