在1994年的Obfuscated C比赛中有一个参赛作品,是最小的quine.它只是一个空文件.
C++规范中是否有允许编译空文件的东西?如果没有,"有效程序"的最低要求是什么?我依稀记得在某处读到有一个特殊情况,其中一个空文件在C++规范中被赋予了默认实现,但我找不到引用.
我试过这个,虽然我不知道它一定有说服力.
$ rm main_empty.cpp
rm: cannot remove `main_empty.cpp': No such file or directory
$ touch main_empty.cpp
$ g++ -o empty main_empty.cpp
/usr/lib/gcc/.../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
有点溺爱,你可以绕过失踪的主要.
$ g++ -Wl,--defsym=_start=_exit -Wl,--undefined=_exit \
-nostartfiles -static -o empty main_empty.cpp
Run Code Online (Sandbox Code Playgroud)
更新:
有人指出,这main_empty.cpp是多余的.如果从命令中删除它,它将编译相同的内容.
我添加了一些静态垃圾,main_empty.cpp以查看它是否表现在不同的行为,它没有.但确实改变了可执行文件的大小.
#include <iostream>
struct Foo {
Foo() {
std::cout << "hi" << std::endl;
}
} foo;
Run Code Online (Sandbox Code Playgroud)
如果你添加一个main文件,并正常编译它将按照你所期望的典型静态加载输出.