#include "****.h"の呼び出し箇所

このQ&Aのポイント
  • Visual C++のプログラムで自分で作成したインクルードファイルを読み出すコード#include "*****.h"を読み出したいプログラム内のソースファイルの一番上に書くべきか、インクルードファイルの一番上に書くべきかということについて質問します。
  • 呼び出したいインクルードファイル内の関数を使用する場合以外では、どちらにインクルードファイルの呼び出しを記述しても動作するか疑問に思っています。
  • MFCのプログラムなどを見ると、ソースファイルの一番上にインクルードファイルの呼び出しが書かれていることがあります。どちらがより適切な方法なのか、ご意見をいただければと思います。
回答を見る
  • ベストアンサー

#include "****.h"の呼び出し箇所

お世話になります、fujitomoです。 今回お聞きしたいことは、それほど急を要しているわけではなく、フッと疑問に思い、気になったので質問させて頂きました。 質問させて頂きたい事は、Visual C++のプログラムで自分で作成したインクルードファイルを読み出すコード #include "*****.h" を読み出したいプログラム内のソースファイルの一番上に書くべきか、インクルードファイルの一番上に書くべきか ということです。 当然、読み出したいプログラム内でメンバ変数として呼び出したいときなどはインクルードファイルに書きますが、それ以外で、呼び出したインクルードファイル内のある関数を使いたいいった場合です。 どちらにインクルードファイルの呼び出しを記述しても動作しますし、私は前までインクルードファイルの呼び出しはその呼び出したいプログラムのインクルードファイルに書くものだと思っていたのですが、VisualC++のMFCのプログラムなどを見るとソースファイルの一番上に書いています。 どちらでもいいのかもしれませんが、参考となる意見がありましたらよろしくお願い致します。

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8512/19350)
回答No.1

>どちらでもいいのかもしれませんが、参考となる意見がありましたらよろしくお願い致します。 ぶっちゃけ、#includeは、参照している場所よりも前なら、どこに書いても可(一部の例外を除く) どこに書いても良いので「自分スタイル」を確立して、いつもそのスタイルで書いていれば良いと思う。 つまり「書くたんびに、書いてある場所がバランバラン、って事が無ければ良い」ってだけ。 なので「俺はここに書くのが好きだ」って言われれば、誰も反論出来ません。「ここには書くべきじゃない」って言う決まりはありませんからね。 但し「関数プロトタイプ」が書かれたヘッダファイルだけは「関数内で#includeできない」ので「ここには書けない」と言う制約を受けます。

fujtomo
質問者

お礼

chie65535様、ご回答ありがとうございます。 #includeはどこに書いてもいいんですね。自分流に統一して 書くといいということですか。 ご回答ありがとうございました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

すみません, 「インクルードファイルの呼び出し」という言葉の意味が分かりません. そのため「読み出したいプログラム内でメンバ変数として呼び出したいときなどはインクルードファイルに書きますが」とか「インクルードファイルの呼び出しはその呼び出したいプログラムのインクルードファイルに書く」とか書かれてもどのような状況のことを指しているのかがさっぱり分かりません. 簡単な例を書いてもらえませんか?

fujtomo
質問者

お礼

Tacosan様、ご意見ありがとうございました。 簡単な例でいうと (例) sampleB.hというヘッダーファイルを読み出して、そのヘッダーファイル 内の関数をsampleAというプログラム内で使いたい。 とした場合に、 //sampleA.h #include "sampleB.h" と //sampleA.cpp #include "sampleB.h" と呼び出すのは、どちらが良いのかなという質問でした。 その前のchie65535様の回答で、どちらでも良いとのことでしたので 自分流のスタイルを作ってインクルードをしていきたいと思います。 ご意見ありがとうございました。

関連するQ&A

  • ■includeに関して■

    どうも^^ PHPでプログラミングをしていたら ふと思ったので質問させていただきます。 ※オブジェクト指向では書いていません。 (「function 関数名{ }」という形で書いてます) ソースを見やすくするために関数を別のファイルに書いているので よく include を使うのですが、やっぱりincludeする側のソースが長いと プログラム実行速度も遅くなりますよね? あともう1つ質問なんですが 関数(機能)ごとに1つずつソースを書いたほうがよいのでしょうか? それとも、関数を1つのファイルにまとめて書いたほうがよいのでしょうか? 自分の考えでは・・・  まとめてソースを書いたら、使わない関数も当然でてくると思います。  その場合 include すると余分な関数も読み込んでしまい  結果、実行速度が遅くなる。。。という予感がするのですが。 質問ばかりですいません;;

    • ベストアンサー
    • PHP
  • include先でのinclude元の変数について

    度々お世話になっています。 include先でのinclude元の変数の扱いについて疑問に思ったので質問させて下さい。 include元ファイルtest.php include先ファイルinclude.phpとしてtest.php内の変数をinclude.phpに渡したいと考え以下のコードを書きました。 test.php <?php $test = "いけるかな?"; include "include.php"; ?> include.php <?php echo $test; ?> 結果、$testの値を表示する事が出来なかったのですが、$testの値を表示するためにはどのような記述方法があるのでしょうか? また、このような動作を期待している理由としてはPHP部分とHTMLを分離させたいと考えており、ユーザ定義関数に変数を引数として渡して、出力処理をユーザ定義関数内で行うという事も考えたのですが、include先に値を渡す事が出来れば、非常にわかりやすく分離出来ると考えたからです。 他に、PHP部分とHTML部分をファイル分けするやり方などありましたら教えて頂けますとうれしいです。

    • ベストアンサー
    • PHP
  • includeとinclude_onceの使い分け

    まずマニュアルを。 ------------------------------------------------------ PHP: include_once - Manual http://www.php.net/manual/ja/function.include-once.php include_once 命令は、スクリプトの実行時に指定したファイルを読み込み評価します。この動作は、include 命令と似ていますが、ファイルからのコードが既に読み込まれている場合は、再度読み込まれないという重要な違いがあります。その名が示す通り、ファイルは一度しか読み込まれません。 include_once は、スクリプトの実行時に同じファイルが複数回読み込まれ、評価される可能性がある場合に、関数の再定義や 変数値の再代入といった問題を回避するために一回だけ読み込ませるために使用します。 ------------------------------------------------------ …。表面的な機能の違いはわかりました。しかしそれをどう使い分けるのかの説明はなく、分かりませんでした。 よく分からない点は以下です。 ・同じファイルを何度も「include」もしくは「include_once」するケース ・あえて何度も記述しながら実際には1度しか評価してほしくないケース ・何度も記述して、そのつど評価したいケース これらについて例を挙げて教えていただきたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • C言語記述されたものをMFCに移植

    C言語(SDK)で、記述されたソースコードを C++(MFC)で記述したいのですが、 ダイアログベースでSDKだとEnableWindowなどの 処理が増えて、バグの要因となってしまい自分自身で 最後は状態が分からなくなってしまうことがあります、 それで、MFCにして処理を減らそうと思いました。 基本的にはXXXDlg.cppに書きますが、 関数だけのファイルをMFCとして書き換えたいのですが、 メンバを使うことができません。 XXXDlg.hをincludeしたのですが、駄目でした。 どのようにしたらよろしいのでしょうか?

  • iostream インクルード時に発生するエラー

    C++ の勉強をするためにVisualStudio2008にて下記コードをビルドしたのですが、エラーが発生してビルドが失敗しました。 ■ コード #include <iostream> using namespace std; int main() { std::cout << "Hello World !"; return 0; } ■ 操作 空のコンソールアプリケーションを作成し、ソースファイルに追加>新しい項目 にて "temp.cpp" を追加、コードを入力。その後 ビルド > ソリューションのビルド を実行。 ■ エラー(一部) >> 「説明」 列 warning C4985: 'strlen': 前の宣言に属性が存在しません。 error C2039: 'wmemcpy_s' : '`global namespace'' のメンバではありません。 error C3861: 'wmemcpy_s': 識別子が見つかりませんでした error C2039: 'wmemmove_s' : '`global namespace'' のメンバではありません。 error C3861: 'wmemmove_s': 識別子が見つかりませんでした error C2039: 'memcpy_s' : '`global namespace'' のメンバではありません。 error C3861: 'memcpy_s': 識別子が見つかりませんでした error C2039: 'memmove_s' : '`global namespace'' のメンバではありません。 >>対応する「ファイル」列 d:\program files\microsoft visual studio 9.0\vc\include\exception d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd プロジェクトのプロパティやインストール時の構成などで何か問題があるのでしょうか。VisualStudio以外にはWindows SDK 、Windows SDK 6.0A、SQL Server2005などが導入されています。 再インストールするのもありかと思ったのですが、原因が分からないとまた同じ現象が発生しそうなため踏み切れません。 よろしくお願いします。

  • include無しにclassが書けない

    粗末な質問タイトルで申し訳ありません。 Visual C++2010で、includeを書かずにclass宣言を行おうとすると「Error:PCH警告」が発生します。 この理由をご教授ください。 IntelliSense: PCH 警告: 適切なヘッダー停止位置が見つかりません。 というエラーメッセージが表示されるのですが、これはプロトタイプ宣言がないときに発生する警告らしいですね。私が書こうとしているソースコードを次に示します。 -----main.cpp---- class TestClass {}; int main(void) { return (0); } ----------------- このソースで、"class"の部分に赤波線が引かれて先述のエラーメッセージが表示されます。 このソースの先頭に#include<iostream>なり#include<stdlib.h>なり何かインクルードを記述すると警告はなくなります。 しかしクラスはその枠のみですし、ライブラリ関数も何も使用していないのでとくに必要なインクルードファイルも何もないと思うのですが、どうしてこのようなエラーが発生するのでしょうか。 あと、蛇足になりますが、本来はクラス宣言部分を別のヘッダーファイルに分けたいのです。 クラス宣言部分を別のヘッダーに分離してヘッダーの先頭に #pragma once を記述するか、分離したヘッダをmain.cpp内でインクルードしてもエラーは解消されます。 (何からもインクルードされなかったらエラーになる) もう何が何やらさっぱりわからないです><

  • [c++] <pthread.h>がinclude できない

    Visual C++ 2008 Express Edition Windows XP Professional SP3 以下のコードがコンパイルできない ーーー #include <pthread.h> ーーー エラー内容 include ファイルを開けません。'pthread.h': No such file or directory LIBをインストールしたりする必要がありますか?

  • extern指定子と実装(#include)について

    2点質問があります。 #1.#includeできるのはヘッダーファイルのみなのでしょうか。    ヘッダファイルをインクルードしなくてはいけないのは、わかっ   てます。.c(Cソースコード)はインクルードできないのでしょう   か。 #2.#1と絡んだことについてです。    たとえば、2つの関数Func1()とFunc2()とをメインルーチンと   は別のソースコードに関数の処理を記述したとします。    ファイル名:Func.c    中身:Func1とFunc2の処理内容    次にこれをメインルーチン内で使用するために以下のように記述   して保存したとします。    ファイル名:Func.h    中身:#include "Func.c" extern void Func1(void); extern void Func2(void); 最終的に、ファイル名:main.c         #include "Func.h" --------------- Func1(); Func2(); というようなことは可能でしょうか。

  • Visual Studio 2008コマンドプロンプトのinclude

    Visual Studio 2008コマンドプロンプトのincludeファイルのパス設定について、教えてください。 C言語で書かれたOpencvのサンプルコード「ヒストグラムの描画」を実行するとエラーが出ます。 http://opencv.jp/sample/histogram.html#hist 「fatal error C1083: includeファイルを開けません。'cv.h':No such file or directory.」 画像を表示する、という別のコードはVisual Studioで実行できましたので、Visual Studioの環境設定は正常ではないかと思います。 環境変数のパスの設定や(マイコンピュータ→システムのプロパティ→詳細→環境変数)、Visual Studioでのライブラリやインクルードファイルの設定も完了しており(ツール→オプション→プロジェクトおよびソリューション)、Visual Studio 2008のIDE環境でビルトすると、別のサンプルコードは実行できました。このふたつめのサンプルコードは一瞬コマンド画面が表示されて、何も結果が出ずに消えてしまいます。 なぜでしょうか? D/Lし直したり、設定しなおしましたが、事象は変わらずとても困っています。 もし何かお心当たりがあればぜひ教えてください。 どうぞ宜しくお願い致します。

  • atlstr.hのインクルードによるエラーについて

    atlstr.hのインクルードにより生じるエラーについて質問させて頂きます。 開発環境は、Visual Studio 2008 Professional Editionです。 (Visual Studio 2008におけるプログラミングは正直まだ慣れておりませんorz) Visual Studio 2008製品内のVisual C++ 2008において、以下の操作を行いプログラムを 実行すると、コンパイルは通るのですが、プログラム実行後にエラー音が一度鳴るだけ でフォームが表示されないというエラーが発生します。その際、タスクマネージャでプロセ スを確認するとプログラム自体は動いているようで、”AtlStrTest.exe”というプロセスが実 行されているのが確認できます。 1.[ファイル]->[新規作成]->[プロジェクト]で新しいプロジェクトダイアログを表示させる 2.[Visual C++]->[CLR]->[Windows フォーム アプリケーション]を選択し、プロジェクト名   ”AtlStrTest”でプロジェクトを新規作成 3.プロジェクト内に生成された”atdafx.h”の”// TODO: プログラムに必要な追加ヘッダー   をここで参照してください。”というコメントの下に#include <atlstr.h>の一行を追加する  原因を分析しようにも、ヘッダをインクルードしただけでエラーが起きるという状況がは じめてなので、途方に暮れている状態です。 大変恐縮ですが、このatlstr.hのインクルードによるエラーがなぜ発生したのかについて、 どなたかアドバイスよろしくお願いいたします。 【関連情報】  同様の操作を、Win32コンソールアプリケーションで実行したときは、このようなエラーは 出ませんでした

専門家に質問してみよう