Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

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'

ただし、GNU Cコンパイラの拡張により、ネストされた関数を宣言できます。このため、入れ子関数を宣言する前にautoキーワードを追加する必要があります。

#include <stdio.h>
main(void) {
   auto int my_fun();
   my_fun();
   printf("Main Function\n");
   int my_fun() {
      printf("my_fun function\n");
   }
   printf("Done");
}

出力

my_fun function
Main Function
Done

  1. JavaScriptの簡潔な矢印関数

    簡潔な矢印関数の構文は次のとおりです- (param1, param2) =>param1+param2 のみがあり、単一のパラメータがある場合は、次のように記述することもできます- param1=>param1*2 の後に中括弧{}がない場合は、暗黙的に戻ります。 以下は、JavaScriptで簡潔な矢印関数を実装するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta na

  2. JavaScriptのファーストクラス関数

    JavaScriptは関数をオブジェクトとして扱い、関数をパラメーターとして別の関数に渡したり、他の関数から関数を返したりすることもできます。 JavaScriptでは、関数はファーストクラスの関数です。つまり、変数、オブジェクト、配列に格納できます。高階関数は、関数を取得するか、関数を返すか、またはその両方を実行できます。 以下は、JavaScriptでファーストクラス関数を実装するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT