くるしいバイナリ(1) return文がない | のんびりした人の日記

のんびりした人の日記

仕事の愚痴とアニメ関連のことを書いていきます。

苦しいです。毎度。

今回もヘンなコードで悩まされています。

「たのしいバイナリ」のあるコードの一部分なのですが、

unsigned long get_sp(void)
{
__asm__("movl %esp,%eax);

}

ん??

「この関数おかしくね?」とまだまだ初心者である私は思うわけです。

「戻り値の型がunsigned longなのにこの関数から呼び出し元に戻される値がない。というかreturn文がない」

案の定、コンパイルしようと思ったらエラーが出ましたね。

  warning: control reaches end of non-void function [-Wreturn-type]
}
^
明らかに「return文書いて戻り値を設定しろ」ってことですよね。

しかし、この関数の戻り値に何を設定すればいいのか。。。。。

この関数を使っているのがほかのサブルーチンの「int cpy(char *str)」という関数の中で、

printf("0x%08lx",get_sp() + 0x10);

という風に使われているんですよね。





……というかなんかこのままで本では話が進んで行ってるw

エラー出たままでいいってというのもなんだかしっくりこないけど、こんなもんなのかねぇ。。。