2012-12-19 42 views
0

我組建了我的項目,將main和c源保存在一個文件中,並將頭文件保存在codeblock的include目錄中。 當我從項目主函數中調用我的函數時,它編譯的很漂亮..但是當我使用其他文件的頭文件時,編譯器找不到函數。原型在頭文件中,但它們的定義位於另一個文件中的源代碼中。我可以訪問存儲在頭文件中的預處理器常量和宏,但函數原型與其源代碼之間的鏈接看起來並不存在於實際項目之外。無法創建可從我的程序訪問的C頭文件

我的目標是製作頭文件,就像我正在使用的現有頭文件(stdio.h,stdlib.h等)。我找不到任何有用的東西。幫助我,我已經在這裏好幾天了!

我知道我可以使用功能更容易的.c文件,但我想要的挑戰,想創建lib文件,我是一個性能怪胎(據我所知使用.h文件,而不是.c文件是更有效,不記得爲什麼,雖然)

頭文件:

 #ifndef FIRO_H_INCLUDED 
     #define FIRO_H_INCLUDED 

     #include <stdbool.h> 

     #define MA_TA 69 

     bool checkprime(unsigned long long); 
     int square(int); 

     #endif // FIRO_H_INCLUDED 

源代碼:

 #include "firo.h" 
     #include <math.h> 

     bool checkprime(unsigned long long prime) 
     { 
      unsigned long long root=(unsigned long long)(sqrt(prime)+1); 
      unsigned long long i; 
      for(i=2; i<=root; i<3?(i++):(i+=2)) 
      { 
       if(prime%i==0) 
       return false; 
      } 
      return true; 
     } 

     int square(int a) 
     { 
      return a*a; 
     } 

我所期待的一個答案,而不是諷刺。我確實在某個地方看到,將代碼分割成.h文件和源代碼將會以某種方式加速訪問函數的過程,不要責怪我不知道它是如何工作的。我實際使用的checkprime函數,其餘部分僅用於測試。

+3

您正在尋找的詞是'linkage'。 – 2012-12-19 17:26:20

+2

我們可以看到標題嗎? – Linuxios

+0

在較大的情況下,對於共享庫而言,.h並不更高效,只是較小的一個。特別是對於像C庫這樣的東西。我想起了一個將C庫作爲靜態的系統...... – Linuxios

回答

0

在代碼塊中,您必須爲靜態庫創建一個不同的項目並構建它。然後,您可以打開主項目的鏈接器設置(項目 - >構建選項 - >鏈接器設置選項卡),並將您的庫添加到「鏈接庫」列表中。

+0

但我必須同意其他評論者的意見。不要試圖優化你還沒完全理解的東西。一旦你的程序完成,分析它,找到它的瓶頸並修復它們。你會驚訝於實際的瓶頸與你期望看到的瓶頸有什麼不同。 –

相關問題