2017-01-04 14 views
0

我有幾個頭文件庫:header1.hheader2.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

上面提到的視頻包含了您應該知道的成功使用頭文件的所有內容。 –

相關問題