2009-03-20 11 views
4

今日私は聞いたことのないネストされた機能に出くわしました。それはGNU Cの一部ですか?入れ子関数はC標準の一部ですか?

ここに入れ子関数のwikipediaの例があります。

float E(float x) 
{ 
    float F(float y) 
    { 
     return x + y; 
    } 
    return F(3); 
} 

コードから、ネストされた関数はC++インライン関数のようなものです。だから、入れ子関数のアドレスを取り出すことは可能ですか?

編集:アダムによって与えられた

gccのリンクは、ネストされた関数のコードは、スタック上に動的に作成されていることを述べています。しかし、スタックからどのようにコードを実行しますか?コードセグメントには存在しないはずです。

答えて

12

いいえ、これらはCまたはC++標準の一部ではありません。これらはGCCコンパイラのGNU拡張です。詳細については、GCC manualを参照してください。実際には、trampolinesという手法を使ってネストされた関数のアドレスを取得することはできますが、マニュアルに記載されている注意点に注意してください。

+0

おかげアダムGCC extensionではありません。それは良い説明だった。 – chappar

1

ネストされた関数は、標準C

関連する問題