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);