注意:これは宿題ではありません。プログラムは完全ではなく、完全には機能しませんが、少なくともコンパイルする必要があります。
私は、C Primer Plus Book を使用して独学でプロセスを進めている最中です (要するに、私は C の初心者です)。私は本全体をほぼ読み終え、各章の練習問題に取り組んでいます。これはそれらの時間の 1 つです。独特の問題に遭遇しましたが、それはプリプロセッサ ディレクティブに関連していると確信しています。
私は MinGW (Windows 用の gcc) を使用しており、次のように報告されます。
gcc が報告するエラーは次のとおりです。
nanfunct.c: 'keywords' の複数の定義
nanite.c: ここで最初に定義された
etc... etc... さらにエラーが発生しました...
これは複数のヘッダー ファイルが含まれていることが原因であると確信していますが、さらに重要なのは、私が作成してインクルードしたヘッダー ファイルがこの問題を引き起こしていることです。
この問題は、まだ事前定義されていない場合にのみ定義するように言っていますが、コンパイル時に複製される文字配列へのポインター (または文字列ベースの配列) にリンクしているようです。
例えば:
#ifndef MENU_OPTIONS
# define MENU_OPTIONS ON
# if MENU_OPTIONS == ON
...some code here...
char * keywords[] = {
"copy", "help", "line",
"quit", "read", "write"
};
char * keyletters[] = {
"c", "h", "l",
"q", "r", "w"
};
# endif
#endif
私は3つのファイルを使用しています:
nanite.c -> main() の
ソース ファイル nanfunct.c -> 関数
nanproto.h のソース ファイル -> nanite.c および nanfunct.c のヘッダー ファイル
nanite.cとnanfunct.cの中にnanproto.hを#include します
Pastebinに投稿されたソース ファイル:
nanproto.h -> nanite.cおよびnanfunct.cのヘッダー ファイル
nanite.c & nanfunct.c -> ソース ファイル
なぜこうなった?#ifndefは、このようなことが起こらないようにするためのものだと思いましたか?