1994 年の難読化 C コンテストには、最小のクワインとして認定されたエントリがありました。それはただの空のファイルでした。
空のファイルをコンパイルできる 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
少し甘やかすだけで、不足しているメインを回避できます。
$ g++ -Wl,--defsym=_start=_exit -Wl,--undefined=_exit \
-nostartfiles -static -o empty main_empty.cpp
アップデート:
main_empty.cpp
冗長であることが指摘されました。コマンドから削除すると、同じようにコンパイルされます。
静的ジャンクをいくつか追加してmain_empty.cpp
、別の動作で現れるかどうかを確認しました。ただし、実行可能サイズは変更されました。
#include <iostream>
struct Foo {
Foo() {
std::cout << "hi" << std::endl;
}
} foo;
ファイルにを追加し、main
通常どおりコンパイルすると、通常の静的ロードで期待どおりに出力されます。