-5

returnステートメントが存在しない場合のint型returnステートメントの戻り値は何ですか

なんで?

int func()
{
 printf("Hello");
}

int func1()
{

}

void main()
{
 int s,p;

 s=func();
 p=func1();
 printf("%d %d", s, p);
}
4

2 に答える 2

6

Cでは(これが質問のタグ付け方法です)、との両方の戻り値funcfunc1未定義です。

C11(n1570)、§6.9.1関数の定義

関数}を終了するに到達し、関数呼び出しの値が呼び出し元によって使用される場合、動作は未定義です。

さらに、ホストされた環境では、returntypeは。ではなくmainである必要があります。ちなみに、例外があります。C99とC11では、終了する(*)に達すると、環境に返される値は0になります。intvoid}main

(*)その戻りタイプが。と互換性がある場合int

于 2013-03-20T15:31:24.420 に答える
0

あなたはコメントで言います:

func()の場合、5の戻り値を取得しています

今回、実際にマシンで発生したように見えるのは、の戻り値printf(5、印刷された文字数)がfuncレジスターに戻ったことです。funcは、自身が戻る前にそのレジスタを変更していないため、同じレジスタをチェックしたときmainの戻り値のように見えるものを確認します。func

の分解された実行可能コードを調べることで、これを確認または反論することができますfunc

これが実際に起こったことである場合、それは使用中の呼び出し規約の詳細であり、呼び出しfunc後にレジスタを使用しない出来事ですprintf。キリレンコが言うように、行動は正式には定義されておらず、あなたはそれに依存する権利がありません。

于 2013-03-20T16:29:59.530 に答える