我们可以将函数定义为另一个函数吗?

时间:2014-09-03 18:23:00

标签: c function static-methods

int main()
{

  static int fun(){}
  return 0;
}

**如果我们将一个函数定义为另一个函数,那么为什么这段代码会出现以下错误:**

错误:函数'fun'的存储类无效

2 个答案:

答案 0 :(得分:3)

这称为“嵌套函数”。 C中不支持它。某些编译器(例如gcc)将其作为语言扩展提供。您不需要static关键字。

答案 1 :(得分:1)

C不支持嵌套函数,就像那样简单。

回答关于 gcc 非标准嵌套函数和static关键字的评论中的问题:如gcc manual中所述(链接信用额the other answer) :

  

嵌套函数始终没有链接。用extern或static声明一个是错误的。

换句话说,static关键字不起作用,因为它被明确记录为无效语法,因为它不能代表人们期望它的含义。


为了进行比较,标准C ++的解决方法是能够在函数内部定义类/结构成员函数以及类/结构。而C ++ 11也有适当的lambda语法。但在标准C中没有这样的东西。