2014-02-27 51 views
0
static void foo(void); 

[.....] 

void foo(void) { 
    ..... 
} 

产生静态范围的“foo”,而如果将“static”从声明移至定义,则会出现错误。我不能制定一个谷歌疑问,让我一个理由,但似乎并不理性的我....过程声明和定义不匹配

没有人有见解?

+0

'lint'也警告在这里。在两个声明中都加入'static'。 – ouah

+0

这样做最有意义。问题在于为了让它与众不同而寻找理由。我偶然发现了一个“静态”通常只应用于声明而不是定义的环境。这个问题的出现是因为我惊讶地发现它是合法的并且使程序具有静态范围。 –

回答

0

连接器需要的函数声明来解决,通过翻译单元调用。所以,如果函数被声明为静态的,它将不能在翻译单元之外访问。

如果您声明functio为非静态,并将其定义为静态,则会出现错误,因为声明&定义不匹配,但名称相同。

0

想象典型情况下函数的声明可能是一个头。如果你声明函数不是静态的,你告诉编译器“这个函数在这个翻译单元之外是可用的”。然后该函数被定义为“仅在该翻译单元中可见”,这当然是不可行的。

周围的其他方式(你写的方式),你的声明说:“这个功能不可用本机之外”,并定义为“顺便说一句,这里是功能”。定义中并没有提到静态的事实并不重要。

诚然,这会更有意义,迫使“静态性”是声明和定义之间是相同的,但我认为它仍然有效的方式是。