Как правильно использовать статические функции? - PullRequest
0 голосов
/ 26 октября 2018

У меня есть этот код, который работает, но я не думаю, что делаю это правильно.У меня есть 3 файла, main.c, init.c и init.h.

init.h. Файл выглядит следующим образом (для простоты я пропустил директивы препроцессора в этом примере):

void init(int param);

int firstCFG(int param);
int secondCFG(int param);
int thirdCFG(int param);
int fourthCFG(int param);
int fifthCFG(int param);

и файл init.c выглядит следующим образом:

#include "init.h"

void init(int param){
   int cfg1 = firstCFG(1);
   int cfg2 = secondCFG(2);
   int cfg3 = thirdCFG(3);
   int cfg4 = fourtCFG(4);
   int cfg5 = fifthCFG(5);
}

int firstCFG(int param){
   //do stuff
   return stuff;
}
int secondCFG(int param){
   //do stuff
   return stuff;
}
int thirdCFG(int param){
   //do stuff
   return stuff;
}
int fourthCFG(int param){
   //do stuff
   return stuff;
}
int fifthCFG(int param){
   //do stuff
   return stuff;
}

, и из моего файла main.c я называю это так:

#include "init.h"

int main(int argc, char** argv) {

    init(0);

    //do stuff....
}

Так что в основном я вызываю только одну функциюв init.c - init(); и другие функции в этом файле вызываются из самого файла.Но поскольку я включил init.h в основной файл, я могу вызывать все функции CFG из основного, но я не хочу этого делать.Я хочу, чтобы файл main.c видел только функцию init() и функции CFG для приватности init.c.Итак, мой вопрос: как правильно это сделать?

Первоначально я хотел сделать функции CFG static и не делать #include "init.h" в main.c, поэтому только init()ехЬегп.Это тоже сработало, но компилятор дал мне предупреждение warning: implicit declaration of function ‘init’

1 Ответ

0 голосов
/ 26 октября 2018

Я бы поставил только void init(int param); прототип в init.h. Сделайте все функции CFG static в init.c.

Вам по-прежнему понадобятся прототипы для функций CFG (если вы не переместите init() в конец), но вы можете просто объявить их в init.c. Или вы можете поместить их в отдельный файл init_impl.h, который недоступен пользователям вашего модуля, в #include.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...