ホームページ  >  記事  >  バックエンド開発  >  C90 で関数名を関数ポインターとして使用できるのはなぜですか?

C90 で関数名を関数ポインターとして使用できるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-12 03:22:02923ブラウズ

Why Can Function Names Be Used as Function Pointers in C90?

関数名を関数ポインターとして使用する

C90 の理論的根拠に関する文書は、関数名を関数ポインターと同等にする設計上の選択についての洞察を提供します。この利便性により、特定のコンテキストでの関数ポインターの使用が簡素化されます。

関数宣言

次の宣言を検討してください。

int f();
int (*pf)();

関数呼び出し

次のすべての有効な明示的な関数呼び出し:

(&f)();
f();
(*f)();
(**f)();
(***f)();

pf();
(*pf)();
(**pf)();
(***pf)();

各行の最初の式については前に説明しました。 2つ目は従来型です。後続の式は、ほとんどのコンテキストで関数指定子からポインタ値への暗黙的な変換を暗示します。

設計の理論的根拠

委員会は、これらの形式を許可することに重大な欠点はないと考え、検討しました。過度の努力としてそれらを禁止します。したがって、関数指定子と関数ポインターが等価であることにより、ポインターの使用が便利になります。

暗黙的な変換

もう 1 つの興味深い観察は、使用時に関数型がポインターに暗黙的に変換されることです。戻り値の型としてではなくパラメーターとして:

typedef bool FunctionType(int);
void g(FunctionType); // Implicitly converts to void g(FunctionType *)
FunctionType h(); // Error
FunctionType *j(); // Returns a function pointer with the type bool(int)

以上がC90 で関数名を関数ポインターとして使用できるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。