静态声明遵循非静态声明,但没有静态声明的函数

时间:2016-07-08 13:23:03

标签: c declaration

我的代码类似于以下内容:

void interact();
int main( int arg_count, const char* args[] ){
    tty_save();                 /* save current terminal mode */
    interact();                 /* interact with user */
    tty_restore();              /* restore terminal to the way it was */
    return 0;
}

void interact(){
    /* do various stuff */
}

我没看到“静态声明”在哪里。我在main()之前声明了一次(非静态)函数,然后在main()之后再次非静态地定义函数。为什么我收到此编译错误?

错误是“静态声明interaction()遵循非静态声明”。

1 个答案:

答案 0 :(得分:0)

这种类型的错误经常发生在意外或故意将一个函数包含在另一个函数中时,通常在C中不允许。通常这是因为文件本身或其中一个中存在不匹配的前导支撑。同一翻译单元中的其他文件通过标题包含在内。不匹配的支架可以在包含的原型中或在定义的主体中发生。例如,如果原型中存在语法错误,如下所示:

void stringInsertChars( BUFFER* buffer, const char* c ){

而不是......

void stringInsertChars( BUFFER* buffer, const char* c );

然后它可能导致错误,这本身就是误导。在这里,发生的事情是原型已经从定义中复制,但编码器忘记将{更改为;

检测此问题的方法是仔细检查错误消息的整个主体。如果问题不匹配,那么您将看到错误如下:

File mycode.c in function stringInsertChars 46:
    Static declaration of interact() follows non-static declaration....
    (more errors of the same type)

因此,错误消息将告诉您哪个原型(或定义)具有额外支撑。