Лучше объявить функцию статической, сделать ее закрытой или объявить ее только в файле .c и исключить ее из заголовка? - PullRequest
0 голосов
/ 03 июня 2019

Я пишу библиотеку в c, и есть некоторые функции, которые я хотел бы вызвать из другого файла c, а некоторые я хотел бы сохранить в секрете.

Я знаю, что можно скрыть функциивне файла библиотеки, объявив его static, но того же можно добиться, объявив только реализацию на нем и не указав его в заголовке.

Сравните:

a.h

//static int private_routine();
int sample();


a.c

/*static*/ int private_routine(){

}
int sample(){
  private_routine();
}

Какойпрактика лучше?

1 Ответ

4 голосов
/ 03 июня 2019

Чтобы сохранить функции "приватными" или, что лучше, в пределах одного файла, вам нужно объявить их static. В противном случае вы можете повторно объявить ту же функцию в другом файле и по-прежнему использовать ее.

Например:

#include "a.h" // without declaration of private_routine()

/*extern*/ int private_routine(); // by default every declaration behaves as with extern keyword, which means function is defined elsewhere

int main()
{
    private_routine(); // can use here
    return 0;
}

РЕДАКТИРОВАТЬ: И, как указано в комментариях, невозможно определить функцию с одним и тем же именем несколько раз в одном приложении, не объявив ее static. Если вы определяете данное имя функции N раз, по крайней мере N-1 из них должно быть static.

...