如果函数是静态的,为什么我的本地函数声明不起作用?

时间:2016-11-22 13:40:52

标签: c static

//#define static /*empty*/
int main()
{
    static int a();
    return a();
}
static int a() { return 0; }

如果我删除(#define static /*empty*/静态关键字,但是静态,它会断开:error: static declaration of ‘a’ follows non-static declaration(gcc) )。

这种行为的原因是什么?

1 个答案:

答案 0 :(得分:1)

使用static关键字在另一个函数内声明函数是无效的(并且没有意义)。 C标准明确禁止这样做:

C11 draft, 6.7.1

  

声明具有块范围的函数的标识符   应该没有extern之外的显式存储类说明符。