0

プロジェクトを作成し、main と c ソースを 1 つのファイルに保存し、ヘッダー ファイルをコードブロックのインクルード ディレクトリに保存しました。プロジェクトのメイン関数内から関数を呼び出すと、美しくコンパイルされます..しかし、#include使用する他のファイルへのヘッダーを使用すると、コンパイラは関数を見つけることができません。プロトタイプはヘッダーにありますが、それらの定義は別のファイルにあるソース コードにあります。ヘッダーに格納されているプリプロセッサ定数とマクロにアクセスできますが、関数プロトタイプとそのソース コード間のリンクは、実際のプロジェクトの外部には存在しないようです。

私の目標は、使用していた既存のもの (stdio.h、stdlib.h など) と同じようにヘッダー ファイルを作成することでした。どこにも役立つものは見つかりません。私を助けてください、私は何日もこれにいました!

関数を使用して .c ファイルを作成する方がはるかに簡単であることはわかっていますが、挑戦したい、lib ファイルを作成したい、そして私はパフォーマンス フリークです (私が知る限り、.c ファイルの代わりに .h ファイルを使用するのははるかに効率的ですが、理由を思い出せません。)

ヘッダファイル:

        #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 関数で、残りはテスト用です。

4

1 に答える 1

0

コードブロックでは、静的ライブラリ用に別のプロジェクトを作成してビルドする必要があります。次に、メイン プロジェクトのリンカー設定 ([プロジェクト] -> [ビルド オプション] -> [リンカー設定] タブ) を開き、ライブラリを [ライブラリのリンク] リストに追加します。

于 2012-12-20T03:25:19.263 に答える