2017-01-04 11 views
0

У меня есть несколько файлов заголовков в библиотеке: header1.h, header2.h ... У меня также есть общий заголовочный файл для библиотеки: mylib.hКак сделать функцию видимой через файл заголовка в C

Я хочу пользователь импортирует файл main.h и получает доступ к только некоторым функциям в других файлах заголовков.

Например, в библиотеке:

// header1.h 
void a(void); 
void b(void); 

-

// mylib.h 

// I can't use this: 
#include "header1.h" 
// because it would make b function visible. 

// Link to function a ???????? 

И в моей основной программе:

// main.c 
#include "mylib.h" 

int main(void) { 

    a(); // Visible: no problem 
    b(); // Not visible: error 

    return 0; 
} 

ответ

2

Отдельные функциональные прототипы в различные заголовки, в зависимости от того, что они должен быть «видимым» * 1 или нет (но быть "внутренним").

  • header1_internal.h
  • header1.h
  • header2_internal.h
  • header2.h
  • ...

Включить в *_internal.h заголовки соответстующем *.h заголовок.

Включите заголовки *_internal.h в соответствующие модули, связанные с вашим lib.

Не следует включать *_internal.h в mylib.h.


* 1: Обратите внимание, что даже если не предоставляя прототип таким образом пользователь может очень хорошо обработать его/ее собственный прототип, а затем связать функцию от mylib. Таким образом, функции, не прототипированные, не являются недоступными.

+0

Я надеялся избежать большого количества файлов заголовков, но я думаю, что это единственное решение, которое мы можем найти в C. Спасибо. – Octan

+1

@Octan: Добро пожаловать. См. Мою дополнительную сноску. – alk

0

Если void b(void) не требуется другим заголовочным файлом, и у вас есть доступ к исходному файлу, как насчет перемещения объявления в исходный файл?

// header1.h 
void a(void); 
//void b(void); 

// header1.c 
/* some #include here */ 
void b(void); 
/* other code here */ 
void b(void) { 
    /* implement it */ 
} 
0

Файлы заголовка содержат только функции, которые должны быть доступны пользователю заголовка. Они представляют собой открытый интерфейс.

Смотреть это первая: Organizing code into multiple files 1 YouTube ссылка: Organizing code into multiple files 1

Organizing code into multiple files 2 YOUTUBE ссылка: Organizing code into multiple files 2

Кроме того, вы можете обратиться Introduction To GCC by Brian Gough, чтобы получить больше проникновения в суть компиляции и процесс связывания с использованием GCC.

+0

Вышеупомянутые видео содержат все, что вы должны знать, чтобы успешно использовать файлы заголовков. –

 Смежные вопросы

  • Нет связанных вопросов^_^