1

いくつかのアレグロチュートリアルを行っているときに、奇妙な呼び出しを見つけました。

int al_init();

この関数al_init()は、アレグロ関数を使用できるようにアレグロを初期化します。int al_init();ラインとは何ですか?コードのこの行を変更して除外intしても同じように機能しますが、この行を完全に削除しても機能しません。この行は何をしていますか?私が想像できる唯一のことは、整数を作成し、それにal_init()関数の戻り値を割り当てることです。これは-1、失敗や0成功などの可能性があります。しかし、それがこれを行っている場合、どのようにして戻り値を確認することができますか?価値?

4

3 に答える 3

2

C / C ++には、関数宣言と関数定義があります。

宣言は次のようになります。

int a_function();
void another_function();
double yet_another_function();

説明:

  • 関数名の前の識別子(たとえば、、int)はvoiddouble関数によって返される値のタイプを示します。
  • 指定しない場合、デフォルトで次のようになりますint(これが、intから削除すると機能しますint al_init()が、宣言を完全に削除すると機能しない理由です)
  • void値を返すことは想定されていないことを意味します(技術的には可能ですが、まれなケースです)

定義は次のようになります。

int a_function() {
    std::cout << "hello world!";
    int x = 1;
    int y = 2;
    return (x + y);
}

違いに注意してください。

  • 宣言はで終わります;
  • {定義の後には、中括弧:とで囲まれたコードのブロックが続きますが、 !}はありません。;
  • 場合によっては、関数を宣言する必要はありません。定義がすでに見られているコード内のポイントにある場合、定義は宣言の代わりになります(これは次のポイントにつながります...)
  • 宣言の目的は、たとえば、という名前の関数があり、a_function引数を予期せず、型の値を返すことをプログラムに通知することですint
于 2012-11-05T03:36:53.487 に答える
1

関数宣言を見ていませんか?

于 2012-11-05T03:32:01.607 に答える
1

Cの構文規則によれば、プロトタイプは次のように定義されます。

<return-type> function-name (param1, param2, ..);

また、関数呼び出しは次のように定義されます。

function-name(param1, param2,...);。したがって、明らかに関数プロトタイプを定義し、関数を呼び出さない。

C89および以前のルールは次のとおりです。

上記のルールでは、別のルールは次のとおりです。暗黙の整数戻り型の場合、プロトタイプは実行可能関数コードの外部で定義されると想定されていました。関数内にある場合は、関数プロトタイプ定義ではなく、関数呼び出しと呼ばれます。


それはさておき、質問から始めましょう:

いくつかのアレグロチュートリアルを行っているときに、奇妙な呼び出しを見つけました。int al_init();

それは正しくありません、それは関数プロトタイプまたは宣言のように見えます

関数al_init()は、allegroを初期化して、allegro関数を使用できるようにします。int al_init();とは何ですか。ライン?コードのこの行を変更してintを除外しても同じように機能しますが、この行を完全に削除しても機能しません。

何が機能しないのですか?コンパイルを停止しますか?それは機能を見つけることができないので、それは明らかでしょうal_init()。また、「int」なしで機能する理由は、暗黙的に整数を返すと想定されているためです。

この行は何をしていますか?

al_init()ライブラリ関数が他の場所、通常は.libまたは.aまたはで定義されており、プログラムで使用することをコンパイラに通知.dllします。

私が想像できる唯一のことは、整数を作成し、それにal_init()関数の戻り値を割り当てることです。

コードの解釈がまったく正しくないため、整数は作成されず、値も割り当てられません。

失敗の場合は-1、成功の場合は0などです。しかし、これが行われている場合、戻り値を確認するにはどうすればよいでしょうか。

その関数が何を返したかを知りたいので、al_init()を実際に呼び出しているときにこれを行うことができます。

int retval = al_init(); printf("al_init() returned %d",retval);

于 2012-11-05T03:45:15.503 に答える