C で関数名が関数ポインターとして使用されるのはなぜですか?

Linda Hamilton
リリース: 2024-11-11 02:29:03
オリジナル
404 人が閲覧しました

Why are Function Names Used as Function Pointers in C?

関数ポインターとしての関数名: 設計理論

C では、関数名を関数ポインターとして使用することは、アドレスを適用することと同じです。関数名に演算子を付けます。この動作は、言語の他の部分と矛盾しているように見える可能性があり、その設計理論的根拠について疑問が生じます。

ANSI C90 理論的文書には、この設計上の決定についての洞察が記載されています。

  1. 利便性: これにより、より大きな構造の一部である関数の呼び出しが簡素化されます。たとえば、(*graphics.open)(file) と記述する代わりに、開発者はより簡潔な graphics.open(file) を使用できます。
  2. 構文の柔軟性: 関数指定子と関数指定子の同等性ポインターを使用すると、関数呼び出しの多様な構文形式が可能になります:
(&f)();        // Explicit address-of operator
f();            // Implicit conversion to function pointer
(*f)();        // Deference of a function pointer
(**f)();       // Deference twice
(***f)();      // Deference three times
ログイン後にコピー
  1. 配列名へのポインターとの一貫性: ただし、この言語では、a が である int* に &a を代入することは禁止されています。配列の場合、関数指定子と関数ポインターに対して同じ操作が可能になります。この非対称性は、関数指定子をポインターとして使用することを禁止するよりも害が少ないと見なされていました。

戻りコンテキストで関数型からポインター型への暗黙的な変換がないことについては、その説明は「」の概念にあります。戻り型の装飾。」 C では、関数の戻り値の型は関数のシグネチャの一部であり、変更できません。したがって、関数はそれ自体へのポインタを暗黙的に返すことはできません。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート