C言語では入れ子関数

WBOY
リリース: 2023-09-06 13:57:06
転載
1201 人が閲覧しました

C言語では入れ子関数

一部のアプリケーションでは、一部の関数が別の関数内で宣言されていることがわかります。これは入れ子関数と呼ばれることもありますが、実際には入れ子関数ではありません。これは字句スコープと呼ばれます。 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&#39;
ログイン後にコピー

ただし、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 サイトの他の関連記事を参照してください。

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