int main()
{
static int fun(){}
return 0;
}
**如果我们将一个函数定义为另一个函数,那么为什么这段代码会出现以下错误:**
错误:函数'fun'的存储类无效
答案 0 :(得分:3)
这称为“嵌套函数”。 C中不支持它。某些编译器(例如gcc)将其作为语言扩展提供。您不需要static
关键字。
答案 1 :(得分:1)
C不支持嵌套函数,就像那样简单。
回答关于 gcc 非标准嵌套函数和static
关键字的评论中的问题:如gcc manual中所述(链接信用额the other answer) :
嵌套函数始终没有链接。用extern或static声明一个是错误的。
换句话说,static
关键字不起作用,因为它被明确记录为无效语法,因为它不能代表人们期望它的含义。
为了进行比较,标准C ++的解决方法是能够在函数内部定义类/结构成员函数以及类/结构。而C ++ 11也有适当的lambda语法。但在标准C中没有这样的东西。