一部のアプリケーションでは、一部の関数が別の関数内で宣言されていることがわかります。これは入れ子関数と呼ばれることもありますが、実際には入れ子関数ではありません。これは字句スコープと呼ばれます。 C では、コンパイラが内部関数の正しいメモリ位置を見つけることができないため、字句スコープは効果がありません。
ネストされた関数定義は、周囲のブロックのローカル変数にアクセスできません。アクセスできるのはグローバル変数のみです。 C には、ローカルとグローバルの 2 つのネストされたスコープがあります。したがって、入れ子関数の用途はいくつか制限されています。以下のような入れ子関数を作成しようとすると、エラーが発生します。
#include <stdio.h> main(void) { printf("Main Function"); int my_fun() { printf("my_fun function"); // defining another function inside the first function. int my_fun2() { printf("my_fun2 is inner function"); } } my_fun2(); }
text.c:(.text+0x1a): undefined reference to `my_fun2'
ただし、GNU C コンパイラの拡張機能を使用すると、ネストされた関数を宣言できます。これを行うには、入れ子関数の宣言の前に auto キーワードを追加する必要があります。
#include <stdio.h> main(void) { auto int my_fun(); my_fun(); printf("Main Function</p><p>"); int my_fun() { printf("my_fun function</p><p>"); } printf("Done"); }
my_fun function Main Function Done
以上がC言語では入れ子関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。