gpt4 book ai didi

c - 嵌套函数在C中是什么意思?

转载 作者:太空狗 更新时间:2023-10-29 16:03:50 25 4
gpt4 key购买 nike

void t(){
printf("hello\n");
void s(){
printf("2\n");
}
}
int main(){
t();
return 0;
}

在我调用t()之后,应该定义了s,但似乎不是这样。

它只是被忽略了吗?

最佳答案

支持的知名语言lexically nested functions include :

  • 基于 ALGOL 的语言,例如 ALGOL 68、Simula、Pascal、Modula-2、Modula-3、Oberon 和 Ada。
  • Lisp 的现代版本(具有词法作用域),例如 Scheme 和 Common Lisp。
  • ECMA 脚本(JavaScript 和 ActionScript)。
  • 完全支持 Scala
  • 对 Ruby、Python 和 Perl 等脚本语言提供不同程度的支持(从版本 6 开始)。
  • 还有一种嵌套函数的C相关语言,即D语言。
  • GCC 还支持 C 中的嵌套函数,作为语言扩展。 1
  • Fortran,从 Fortran-90 开始,支持一级嵌套(CONTAINed)子例程和函数。

在您的情况下,函数 s 将仅在 t 中可用。

嵌套函数是在另一个函数内部定义的函数。 (GNU C++ 不支持嵌套函数。)嵌套函数的名称在定义它的 block 中是局部的。例如,这里我们定义了一个名为square的嵌套函数,并调用了两次:

 foo (double a, double b)
{
double square (double z) { return z * z; }

return square (a) + square (b);
}

嵌套函数可以访问在其定义点处可见的包含函数的所有变量。这称为词法范围。例如,这里我们展示了一个嵌套函数,它使用一个名为 offset 的继承变量:

 bar (int *array, int offset, int size)
{
int access (int *array, int index)
{ return array[index + offset]; }
int i;
/* ... */
for (i = 0; i < size; i++)
/* ... */ access (array, i) /* ... */
}

在允许变量定义的地方,函数内允许嵌套函数定义;也就是说,在任何 block 中,与 block 中的其他声明和语句混合。

参见 "Nested Functions - Using the GNU Compiler Collection (GCC)"

关于c - 嵌套函数在C中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6959353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com