C の入れ子関数
C は、他の関数内での関数の配置をネイティブにサポートしていません。ただし、最新バージョンの C (C 11 以降) ではラムダが導入され、限られた形式のネストされた機能が可能になりました。
モダン C のラムダ
ラムダは匿名関数ですこれは、より大きな関数のスコープ内で定義して呼び出すことができます。これらは次の一般的な形式を取ります:
auto lambda_name = [capture_list] (parameter_list) -> return_type { function_body };
例:
int main() { auto print_message = [](std::string message) { std::cout << message << "\n"; }; print_message("Hello!"); }
この例では、print_message は通常の関数と同じように呼び出すことができるラムダです。 .
静的ローカル クラス関数
C 98 および C 03 では、入れ子関数は直接サポートされていません。ただし、ローカル クラスと静的関数を使用することで同様の効果を実現できます。
int main() { struct X { static void a() {} }; X::a(); }
この例では、 a はローカル クラス X 内の静的関数です。ただし、このアプローチはラムダを使用するほど単純ではありません。 、古いバージョンの C でネストされたような機能を実現する方法を提供します。 .
結論
C は関数内の関数を直接サポートしていませんが、ラムダと静的関数を備えたローカル クラスは同様の結果を達成する方法を提供します。ラムダはより簡潔で現代的なアプローチを提供し、ローカル クラスはより高い柔軟性と古いバージョンの C との互換性を提供します。
以上がC で入れ子関数の機能を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。