【问题标题】:Function definition inside another function definition: is it valid?另一个函数定义中的函数定义:它有效吗?
【发布时间】:2011-11-11 07:37:07
【问题描述】:

查看此代码

#include<stdio.h>

int main()
{
    void test(void)
    {
        printf("test");
        return;
    }
printf("main");
return 0;
}

这个 coed 工作正常,不会给出任何警告和错误。我不明白为什么会这样? 在这里,我在另一个函数定义中编写了一个函数定义,所以它有效吗?

编辑:如果是,那么这个有什么用法吗?

为什么 gcc 需要添加这个功能作为扩展......应该有这个的任何用法不是吗?!

【问题讨论】:

标签: c function


【解决方案1】:

函数定义的嵌套依赖于 GCC 扩展来工作。标准中没有描述。

如果您希望您的代码与其他编译器一起工作,那么您应该避免使用此类技术。此外,如果您与其他开发人员合作,我预测他们中的许多人会不喜欢使用这种非标准结构。

我不是 GCC 专家,但我相当确定有编译器选项可以禁用扩展。这将允许您让编译器确保您编写的代码不会与其他编译器一起编译。


关于您的更新,嵌套函数有一些用途。它们可以通过限制范围和可见性来帮助封装。但是,如果没有嵌套函数,没有任何问题无法完美解决,我认为这可以解释为什么它们是很少使用的 GCC 特性。

【讨论】:

  • 你真是个天才……你对我的问题给出了这么多答案……!!
  • 为什么在函数中定义函数不在标准中(C89 和 C99)?
  • @Sahil 因为 C 不是这样设计的。
【解决方案2】:

定义嵌套函数(即在另一个函数内部)是有效的,唯一的限制是前一个函数的范围受封闭函数的限制。这就像定义一个局部变量。你可以在这里找到更多信息:http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html

【讨论】:

    【解决方案3】:

    Joachim 关于嵌套函数是 GCC 扩展的回答是正确的;你还问过它是否有任何用途:我看过数百个项目的源代码,但从未见过有人使用这个特定的 GCC 扩展。

    【讨论】:

      【解决方案4】:

      是的,我们可以在其他函数中定义一个函数。我在 gcc 中编译了下面的书面行,它运行成功,没有显示错误。

      #include<stdio.h>;
      void main()
      {
          int sum()
          {
              int a=30, b=10, c=20, sum=0;
              sum=a+b+c;
              return sum;
          }
          int a;
          a=sum();
          printf("Sum = %d", a);
      }
      

      O/p:60

      【讨论】:

        【解决方案5】:

        我知道 GCC 有这个作为扩展。据我所知,这不是标准的一部分。

        【讨论】:

          猜你喜欢
          • 2011-12-11
          • 2017-11-03
          • 1970-01-01
          • 1970-01-01
          • 2017-09-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多