yohhoyの日記

技術的メモをしていきたい日記

'main' is usually a function

gccの一風変わった警告メッセージ。下記コードはfalse(1)相当を実装する。

unsigned main = 3275800627u;
// xor %eax, %eax  ; 0x33 0xc0
// inc %eax        ; 0x40
// ret             ; 0xc3
// 0xc340c033 = 3275800627

gcc 4.6.3@x86環境の実行結果*1

$ gcc -Wall input.c
input.c:1:10: warning: 'main' is usually a function [-Wmain]

$ ./a.out; echo $?
1

注意:そもそもC標準には違反。x86環境以外では動作しない。上記サンプルではmainシンボルは.dataセクションへ配置されるが、明示的に__attribute__((section(".text")))を指定して.textセクションへ配置した方が良いかも?

*1:x86_64環境では"-m32"オプション指定が必要