• ベストアンサー

ファイルをフォルダに入れて構造化する

私は趣味でCプログラムをしているのですが、自分の書いたプログラムのファイルが多くなった場合フォルダにまとめたいのですが、メインのファイルと違う階層になるのでメインのファイルで #include hoge.h と書いても"インクルードファイル hoge.hが見つかりません"と出ます。 どうすればhoge.hをコンパイラが検索してくれるのでしょうか? Borland C++ Compiler,VC++でできる方法を教えてください(できれば両方がいいです) 環境はwindows ちなみにbcc developer という Borland C++ Compiler をGUIで操作できるツールを使ってます 宜しくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.2

main.c が ~/foo/ にあって、 hoge.h が ~/foo/bar/ にあるなら #include "bar/hoge.h" でよいでしょう。

black_fire
質問者

お礼

相対パスが使えたんですね。単純に。 何故か#includeの所はファイル名しか記述できないみたいな妙な先入観がありました。 ありがとうございます

black_fire
質問者

補足

あ、ちなみに stdio.h のように、あるフォルダ以下のものはファイル名だけ記述していれば、includeできるみたいな事は stdio.h みたいな特別なファイル以外はできないですよね?

その他の回答 (3)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.4

> 相対パスが使えたんですね。単純に。 言語仕様的には#includeに\を使うと未定義になるので/を使う方が無難です。(ISO/IEC14882:2003, 2.8) # VC(少なくとも2003)は".\xxx.h"とかを勝手に生成してきますが…。

black_fire
質問者

お礼

回答ありがとうございます。 そうだったんですね~。 そんな細かい取り決めがあったなんて・・ バグが出る可能性が一つ減って助かります

  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.3

>あるフォルダ以下のものはファイル名だけ記述していれば、 >includeできるみたいな事は stdio.h みたいな特別なファイル以外はできないですよね? gcc なら環境変数 C_INCLUDE_PATH を設定したり、コマンドラインオプション -I を指定すればできますが、Borland C++ Compiler の場合は知らない。

black_fire
質問者

お礼

間違えました。 補足の所にお礼を投稿してしまいました。

black_fire
質問者

補足

koko_u_uさんにはお世話になります 本当に有難うございました!! おかげ様で知りたい事を知ることができました。 またよろしくお願いします

  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.1

>#include hoge.h #include "hoge.h"

black_fire
質問者

お礼

すいません・・・ まだC初心者なもので。はずかしい間違いをしてしまいました(笑)

関連するQ&A

  • BCC Developerについて。

    Borland C++ Compiler、BCC Developerを使って #include <stdio.h> void main(){ printf("Hello C world.\n"); } をメイクしてみたのですが、 インクルードファイル 'stdio.h' をオープンできない 、と表示されコンパイルできませんでした。 環境設定は、コンパイラにbbc32.exeを指定すればいいだけなんでしょうか?よろしくお願いします。

  • コンパイルの仕方が分かりません。

    とあるC言語で書かれたプログラムのコンパイルをしたいと思っているのですが、うまくいかないので質問させて頂きました。 環境はwindowsです コンパイラは bcc developer という Borland C++ Compiler をGUIで使える簡易IDEを使っているので Borland C++ Compilerと考えてください。VC++での方法でも大丈夫です コンパイルの仕方を検索するとハローワールドレベルのプログラムのコンパイル方法ばかりがでてきてしまいます。ですが、私がしようとしているのはオープンソースの他の方が書かれたものをダウンロードしてきてコンパイルするということなのです。 main関数が存在するファイルを発見し、「ここから全てのファイルがincludeされているんだろうからこれ一つをプロジェクトに加えてコンパイルすればいいのだろう」と考えてコンパイルすると関数の未定義エラーが大量に発生しました。 かといって全てのファイルをプロジェクトに追加するとなると量がとても多いのでかなり大変そうです。大変なのはいいのですが本当に皆さんがそんな方法でやっているのかも分からないし、それでやってもうまくいかないような気がします。 win32APIを使用している部分があったのでwinwosアプリケーションモードでコンパイルしてもやはりダメです。そもそも未定義エラーが出ているのはそれとは関係のないと思われる関数です。 調べてみるとインクルードパスに追加して・・などという記述をインターネットで発見したのですがこの辺りもよく分かりません。 とにかく、ディレクトリ階層が複雑になっている規模のおおきなプログラムのコンパイルの手順が分からないのでこのあたりについてお教え頂きたいです。 よろしくお願いします。

  • 『Bin』ディレクトリは何の略語?

    Borland C++ Compiler 5.5 上記の無償コンパイラをインストールしたのですが、 ディレクトリ名について質問があります。 bcc55ディレクトリ下の『Bin』とは何の略語なのでしょうか? またどういうファイルを格納する役割からその名前がついたのでしょうか? 他の『Lib』や『Include』などはライブラリファイルを格納するんだなとか、インクルードファイルを格納するんだろうなと、そのディレクトリの役割が直感的に理解できるのですが、『BIN』は直感的にイメージがつかめません。BINARYの略だとしてもバイナリからイメージするファイルってどういったものなのでしょう? それとコンパイラを起動するコマンド『bcc32』はBorland C Compiler の略語と考えてよいのでしょうか?そして32が意味するものは何なのでしょうか? ご存知の方がいらっしゃったら教えていただければと思います。

  • TransparentBlt()

    TransparentBlt()を使う時、msimg32.libをリンクする必要があるそうですが、どうするのか手順を教えてください。 Borland C++ Compiler bcc developerを使ってます。 #include<wingdi.h> を読み込みましたがうまくいきません。 もしかして,マイコンピュータの、C ディスクのwindowsのフォルダから、msimg32.libを探して、それを使うんですか? 教えてください。

  • Borland C++ Compiler で winbase.h を使えないのですが・・・

    Borland C++ Compiler を使っているのですが,winbase.h 自体が使用できません。 次のようなプログラムでもコンパイルが通りません。 #include <winbase.h> int main(void){ return 0; } エラーは以下の通りです。 *** コンパイル開始 *** Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland ########.c: エラー E2139 C:\borland\bcc55\Include\winbase.h 227: 宣言に ; がない エラー E2238 C:\borland\bcc55\Include\winbase.h 228: 'ULONG_PTR' の宣言が複数見つかった エラー E2344 C:\borland\bcc55\Include\winbase.h 227: 一つ前の 'ULONG_PTR' の定義位置 (中略) エラー E2228 C:\borland\bcc55\Include\winbase.h 263: エラーあるいは警告が多すぎる *** 26 errors in Compile *** *** コンパイル終了 *** どうすればよいでしょうか? 何かちょっとした情報でもお願いします。

  • コンパイラC++のDL方法

    こんにちは。 大学の課題で、C言語を使ったプログラムの課題が出されており、 それを書きあげるために、C++コンパイラのDLが必要です。 なので、 http://www.embarcadero.com/jp/products/cbuilder/free-compiler から、C++コンパイラをDLしました。 そこで手順に従って、 freecommandlinetools2 freeturbodebugger をインストールしたまでは良かったのですが、 次の手順が以下のようになっています。 1. freecommandlinetools.exe を実行します。無料の C++Builder 5 コマンドラインツール開発システムをインストールしたいドライブと フォルダを選択します。 2. インストール先の bin ディレクトリで次の手順を実行します。 a. 既存のパスに "c:\Borland\Bcc55\bin" を追加します。 b. bcc32.cfg ファイルを作成します。このファイルは,Include および Lib パスのコンパイラオプション(コンパイラの -I および -L スイッチ)を設定するものです。ファイルには次の 行を含めてください。 -I"c:\Borland\Bcc55\include" -L"c:\Borland\Bcc55\lib" c. ilink32.cfg ファイルを作成します。このファイルは,Lib パスのリンカオプションを設定するものです。ファイルには 次の行を含めてください。 -L"c:\Borland\Bcc55\lib" この中で、 a. 既存のパスに "c:\Borland\Bcc55\bin" を追加します。 の意味がわからないです。新しいファイルを作って保存すればよろしいのですか? どなたか、ご回答をお願いします。

  • コンパイラの設定

    Borland C++ Compiler 5.5をインストールしコンパイルしようとすると hello.c: エラー E2209 hello.c 1:インクルードファイル'stdio.h'をオープンできない。 警告 E8065 hello.c 4:プロタイプ宣言のない関数'printf'を呼び出し(関数 main()) *** 1 errors in Compile*** と出ててしまいました。 そして、過去にも同じような質問があり、 bcc32.cfgファイルに -I"c:\borland\Bcc55\include" -L"c:\borland\Bcc55\lib" を作成しても、何も変わらないのですが…。 教えて下さい。

  • DOSでコンパイルしたらインクルードファイルがない?(開けない?)

    borland c++ コンパイラ5.5をインストールして コマンドプロンプトで実行したのですが こんなメッセージがでました。どうすればよいのでしょうか? ライブラリとかいるんでしょうか? C:\borland\bcc55\Bin>bcc32 ffff.cpp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland ffff.cpp: エラー E2209 ffff.cpp 1: インクルードファイル 'iostream.h' をオープンできない エラー E2451 ffff.cpp 5: 未定義のシンボル cout(関数 main() ) *** 2 errors in Compile *** ちなみにソースファイルの内容は以下のとおりです。 #include <iostream.h> void main(){ cout<<"ffff"; }

  • stdio.hをオープンできない…

    borlandのコンパイラーについての質問です(昔本付属のCDからインストールしたものです。verは5.5だと思われます。) ソースファイル include<stdio.h> void main(void){ printf("おめでとう!!\n"); } コンパイル c:\borland\bcc55\bin>bcc32 basic.c エラーメッセージはE2209 basic.c 1:インクルードファイルstdio.hをオープンできない、となります。このためprintfが使えないエラーメッセージも表示されます。過去の質問を色々と見させて頂きました。以前(昨年夏頃)には使えていた為、必要なファイルが消えている等の原因はなさそうです。メモ帳でbcc32も開いてみましたが-I"c:\borland\Bcc55\include"-L"c:\borland\Bcc55\libの表示があったので必要なファイルも開けているのではないかと勝手に解釈しています(bcc32.cfgフォルダなるものは存在しませんでしたが…)。いろいろと頑張ってみたのですがどうにもダメそうです。コンパイラが作動しないと課題が前に進まないため、大変困っています。是非皆様のお力をお貸し下さい。よろしくお願いします。

  • BCC・stdio.h・_stddef.hのエラー

    BCCと同梱されているstdio.hのエラーなのですが、 stdio.hのエラーは他では出なかったので、 ソース自体がおかしいのかと思っていますが、よく分かりません。 一応ソースを載せます。 #include <stdio.h> int main(int argc, char *argv[]) { if(argv[1] == "") { printf("---(Ver1.00.01)\n"); printf("easy.exe [filename]\n"); printf(" [filename] - ファイル名を指定してください.\n"); } return 0; } これによって次のエラーを吐いてきます。 エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\_stddef.h 53: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\_stddef.h 72: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 51: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 104: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 105: 宣言が正しく終了していない エラー E2293 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 140: ) が必要 エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 150: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 151: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 152: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 154: 宣言が正しく終了していない エラー E2293 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 155: ) が必要 エラー E2293 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 156: ) が必要 エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 160: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 161: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 162: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 164: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 165: 宣言が正しく終了していない エラー E2141 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 166: 宣言の構文エラー エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 172: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 173: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 174: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 175: 宣言が正しく終了していない エラー E2141 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 177: 宣言の構文エラー エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 181: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 188: 宣言が正しく終了していない エラー E2228 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 188: エラーあるいは警告が多すぎる stdio.h,_stddef.hのソースは一切変えたりしていません。 また、BCCのエラーは、stdio.hとprintfを抜いて int main(int argc, char *argv[]) { if(argv[1] == "") { } return 0; } としたときに 宣言が正しく終了していない と表示されます。 環境は WindowsXP SP1 BCC Developer です。 よろしくお願いします。