【问题标题】:Can we declare a function alongside variables in C?我们可以在 C 中声明一个函数和变量吗?
【发布时间】:2016-02-29 22:16:54
【问题描述】:

我最近遇到了一个高尔夫编码 问题,我想在main 本身中编写一个int 类型的函数,它可以访问main 中的所有变量。但是为了减少字符数,我想到了在变量旁边写一个函数。像这样:

int i,f(){/*function code*/};

我可以这样做吗?如果是/否,那为什么?


 Code Golf 是一种娱乐节目形式,其中必须用尽可能短的节目来解决给定的挑战。减少源代码中的字符数是主要目标,可维护性和可读性并不重要。请在发表评论之前考虑这个目标。

【问题讨论】:

  • 没有语言 C/C++。选择一个。
  • 当你尝试它会发生什么?
  • @Olaf 我提到这是为了高尔夫编码的目的!
  • @Olaf 如果他的目标是编写代码以实现尽可能少的字符,那么询问同行社区是否一种语言支持其他地方支持的古怪语法是完全相关的。跨度>
  • @SahilArora 你无论如何都不能在main() 中定义一个函数,不管你怎么打高尔夫球。

标签: c function nested-function


【解决方案1】:
int i,f(){/*function code*/};

在 C 中,不,你不能它不是有效的语法。

你可以这样做:

 int i, f();  /* declare an int i and a function f that returns an int */

这可能不是你想要的。

【讨论】:

  • 太棒了!人们真的会这样做吗?我会非常困惑。
  • f() 是一种旧的 K&R 风格和过时的功能。它应该在正确配置的编译器中生成警告。使用正确的原型。
  • @Olaf C99 不需要诊断(正如您最初发表的评论)。我试图靠近 OP 代码,对于不知道的人,非过时声明是:int i, f(void);
  • 为什么要在边变量中声明一个函数?目的是什么?
【解决方案2】:

在C语言中,不能在另一个函数中定义函数……就是这么简单。

如你所说,如果你想在你的子函数中访问主函数变量。形式变量是不可能的。但是,它可以通过引用调用来实现,即使用指针变量

【讨论】:

  • @JamesRoot:我不确定。 OP 似乎很好地考虑将其用于下一个函数声明。但这可能只是一种想法或普遍的误解。
  • @JamesRoot 提出的问题是“在main 本身中编写int 类型的函数”。
  • 哎呀,我错过了那行。
  • @Aravol 您的链接显示“此页面中当前没有文本。” ...啊,明白了 - 请从链接中删除“which”。我看到那是 ref C++,但 OP 仍然没有选择哪种语言。
  • 此答案仅适用于 C。
【解决方案3】:

除了@ouah,我发现你也可以使用函数指针来做到这一点。这是一个例子:

int i, (*f)();
f = (int(*)())&i;

cout << f << endl;

这个输出将是 i 的地址。

【讨论】:

  • 不错,但严格来说,这不是C,因为cout。
  • 啊,他确实包含了 c 和 c++ 标签
  • ISO C 不支持(将对象指针转换为函数指针),编译器可以将其实现为扩展
【解决方案4】:

您可以在变量旁边声明一个函数:

int fgetc(FILE*), getc(FILE*), errno;

但你不能定义一个函数和一个变量作为函数定义的生产规则(参见 ISO 9899:2011 §6.9.1 ¶1)阅读

function-definition:
    declaration-specifiers declarator declaration-list(opt) compound-statement

declaration-list:
    declaration
    declaration-list declaration

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 2020-08-04
    • 2010-10-01
    • 1970-01-01
    相关资源
    最近更新 更多