为什么我可以在另一个函数中定义一个函数?

Ezi*_*zio 11 c c++ gcc

看到下面的代码,我在另一个函数中定义了一个函数,

void test1(void)
{
 void test2(void)
 {
   printf("test2\n");
 }
 printf("test1\n");
}

int main(void)
{
 test1();
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

这种用法很奇怪,是c89/c99的用法还是gcc的扩展(我在ubuntu 12编译时使用了gcc 4.6.3).我运行此代码并输出"test2"和"test1".test2只能在test1中调用.

更重要的是,这种用法的常见场景是什么,或者这种用法用于什么?

unw*_*ind 18

是的,这是GCC扩展.

这不是C,它不是便携式的,因此不是非常推荐,除非你知道GCC会

  • 是唯一用于构建代码的编译器
  • 将来版本将继续支持此功能
  • 不要关心最不惊讶的原则.

  • @ bjskishore123,`auto test2 = [] {printf("test2 \n");};`不会执行它,但仍然像函数定义那样值得它. (2认同)