2017-05-09 11 views
-1

makefileの作成に問題があります。私がコンパイルするとき、私は非常に多くの問題を抱えています。私の主な問題は、自分のプログラム内でグローバルconstをどこに置くべきかを考え出すことです。私はそれらをすべてメインファイルに入れてみましたが、うまくいかなかったようです。makefileのconst宣言と構造体の問題を作成中にエラーが発生しました

banksystem: main.o admin.o customer.o 
    gcc -o banksystem main.o admin.o customer.o 

main.o: main.c admin.h customer.h 
    gcc -c main.c 

admin.o: admin.c admin.h basefunctions.h 
    gcc -c admin.c 

customer.o: customer.c customer.h basefunctions.h 
    gcc -c customer.c 

basefunctions.o: basefunctions.c basefunctions.h 
    gcc -c basefunctions.c 

これは私がmakefileを作成する方法です。私はそれが正しいかどうか本当に分かりません。私は1つの場所に各機能をテストするためにこれを行う前に、1つのファイルにコード全体を作ったが、今私はそれを分割しようとしている。私は、私は他のグローバルconstの

#define MAX 100 
#define char "customerdata.txt" 
typedef int (*compfn)(const void*, const void*) 

と同様にこれを置くためにどのファイルか分からない万一私はこれらの変数を置く

struct info{ //Example struct 
    int a; 
    int b; 
}; 
struct info collection[MAX]; //Example array 

私のconstと構造体とのエラーのトンを取得していますメインソースファイル?または、私はそれらをbasefunctionsソースファイルに入れなければなりません。また、私の構造体の情報を格納していないファイルでexternを使うべきか、私の構造体をどうやって扱うのでしょうか?私のすべての機能がそれを使用しています。私のすべての関数は配列を使います。

コードがかなり長いので、私はそれを含めるつもりはありません。

構造体、構​​造体の配列、グローバルint const、グローバルchar constを持つときに、コードをmakefileで再フォーマットするにはどうすればよいですか?これは長いですし、漠然としたヘルプは非常に多く、私は提言のいくつかを言及している

+0

問題はmakefileとは関係ありません。すべてのコマンドを自分で実行した場合、メイクファイルなしで同じ問題が発生します。 – immibis

+0

あなたの質問を1つにまとめるのではなく、別の質問を投稿できるのが望ましいです。そうすれば、人々はあなたの質問に答えるのを助け、他の人はあなたの質問の少なくとも1つを捜すのに役立ちます。ありがとう! –

答えて

-1

をいただければ幸い場合

void load(){ 
     FILE *fp; 

     fp = fopen(FILE_NAME, "rb"); 
     if (fp != NULL){ 
       fread(collection, sizeof(struct userinfo), MAX, fp); 
     } 
     else{ 
       printf("ERROR"); 
     } 
     fclose(fp); 
} 

void save(){ 
     FILE *fp; 

     fp = fopen(FILE_NAME, "wb"); 
     fwrite (collection, 1, sizeof(collection), fp); 
     fclose(fp); 
} 

私も

warning: passing argument 1 of ‘fopen’ makes pointer from integer without a 
cast [-Wint-conversion] 
    fp = fopen(FILE_NAME, "rb"); 
       ^

申し訳ありませんが、これらの機能の両方を使用してこの警告を取得していますヘッダーファイル内のグローバルについて

すべてのグローバルをヘッダーファイルに入れてください。 ヘッダーファイルを保護するようにしてくださいあなたのヘッダファイルで宣言した各グローバル変数は(myheader.h例えば)例えば

MYEXTERN struct info collection[MAX]; 
としてdelaredれるべきトップ

#ifndef __MYHEADER__FILE__ 
#define __MYHEADER__FILE__ 
#endif 

でこれを追加することにより、同一のオブジェクト(.o)は二度含まれませES

を指定すると、myheaderが含まれます。Cの残りのCファイルのいずれかにおいて、複数のCファイル におけるH(主現在でpreferrable)これは、構造体情報収集として宣言されたコレクションを保証それ

#define MYEXTERN 
#include<myheader.h> 

として含む[MAX]

これは、コレクションはEXTERN構造体の情報収集として宣言されることを保証

#define MYEXTERN extern 
#include<myheader.h> 

としてファイルあなたがそれを含める必要があります[MAX]

-1
banksystem: main.o admin.o customer.o 
gcc -o banksystem main.o admin.o customer.o 

ここにはbasefunctions.oが含まれていなければなりません。

関連する問題