Почему пришла эта ошибка? "статическое объявление функции следует за нестатическим объявлением"?

Я узнаю о статической функции и, как правило, если я объявляю функцию как статическую функцию, я не могу получить доступ к этой функции в другой файл c, и если я пытаюсь получить доступ, то должна появиться ошибка "undefined reference to` fun", поэтому я объявляю и определяю статическую функцию в файл add.c и add.h и вызываю эту функцию в файл main.c, но я получаю другую ошибку, т. е. "статическое объявление" fun "следует за нестатическим объявлением",сильный текст, поэтому мой вопрос вот почему эта ошибка пришла???? пожалуйста, прости меня за мой плохой английский!!!!

/************** main.c****************/
    #include <stdio.h>
    #include <stdlib.h>
    #include "add.h"

    int main(void)
    {
      printf("%d ", fun());
      printf("%d ", fun());
      return 0;
    }

/***************add.c*************/

    #include <stdio.h>
    #include "add.h"

    static int fun(void)
    {
      int a=5,b=4;
      return a+b;
    }

/*********************add.h*************/

    #ifndef ADD_H_
    #define ADD_H_

    static int fun(void);

    #endif /* ADD_H_ */

1 ответ

Решение

Статическая переменная или функция видна только в файле, где она объявлена.

Стандарт С11

6.2.2.3

Если объявление идентификатора области файла для объекта или функции содержит статический спецификатор класса хранения, идентификатор имеет внутреннюю связь.

Другие вопросы по тегам