【问题标题】:Defining a Function inside of main() [duplicate]在 main() 内部定义一个函数 [重复]
【发布时间】:2014-05-21 05:20:21
【问题描述】:

出于好奇,用 C 语言在 main() 内定义函数是否被认为是不好的做法?

我正在编写的当前程序的问题是我有 20 个指向在 main() 内部定义的结构的指针(指针,而不是结构本身,它们在其他文件中),并且我有一个块需要使用不同参数多次调用的代码,并且它必须具有修改任何指针的能力。我找到的唯一解决方案(我是 C 新手)是在 main() 内部定义一个函数,该函数具有修改任何指针的正确范围。

【问题讨论】:

  • 这不是一个糟糕的做法,你根本做不到。
  • GCC 不适合,它按计划运行...幸运的是,我使用的计算机与编写代码的计算机不同,并且无法分享我的内容有...
  • 使用-pedantic会报错:warning: ISO C forbids nested functions
  • @MBlanc 同意。我已将其标记为重复。我很抱歉。
  • "I have 20 some structs that are defined inside of main()"。那是你的核心问题,你没有程序设计。您的问题的解决方案不是进一步混淆您的程序,而是使用面向对象的方法将您的程序分成独立的模块,每个模块只知道自己的任务。

标签: c conventions nested-function


【解决方案1】:

Gcc 编译器允许您在其他方法中定义方法(实际上这是一个 Gnu 扩展)。但是,通常这是一种不好的做法。

在您的情况下,这是您的方法了解此特定类型的唯一方法。但我建议您将类型设为外部并声明以正常方式使用此类型的方法(在任何其他方法之外)。

【讨论】:

    【解决方案2】:

    GCC 允许,但它是特定于该编译器的非标准扩展 - 因此您的代码不会在任何其他编译器上编译

    【讨论】:

      【解决方案3】:

      嵌套函数(函数中的函数)是 GNU 唯一的扩展,不是任何常规 C 标准的一部分。任何其他编译器都无法编译它。因此,我强烈反对使用嵌套函数。

      在外面声明你的结构和函数。然后,您始终可以将指向数据结构的指针传递给您的函数。

      struct s {...};
      
      void foo(struct s *, ...);
      
      int main() {
      
        struct s mystruct;
        foo(&mystruct, ...);
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-16
        • 2018-02-25
        • 1970-01-01
        • 2018-05-12
        • 2012-06-09
        • 2019-04-05
        相关资源
        最近更新 更多