多重インクルードにういて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
uul

多重インクルードにういて

#1

投稿記事 by uul » 15年前

多重インクルード禁止について
今まで、メインソース(cpp)一つとヘッダーでやってきましたが
最近プログラムが長すぎるようになり多重インクルードよく発生します。
毎回インクルードファイルを書くのもめんどくさいし、どうやったら多重インクルードをおこらないように
綺麗まとめられます?
あと、関数も私はヘッダーに書いてましたけど、
人のプログラムを見るとヘッダーに関数の名前、cppファイルにその関数の内容を書いてます。
普通はそうなんですか?

array

Re:多重インクルードにういて

#2

投稿記事 by array » 15年前

多重インクルードという用語を知っているので既知の事かもしれませんが

C++ だと、ヘッダファイルの先頭の行に
#pragma once
を追記するだけで多重インクルードガードしてくれます。

ヘッダファイルには宣言のみで実態を記述してはいけません。
記述されてると、コンパイルエラーになるはずなのでお気をつけて。

C言語でも可能です
/* main.h */
#ifndef MAIN_H      // インクルードガード
#define MAIN_H

struct sample
{
	int num;
};

#endif             // ここまで
MAIN_Hというのは、ヘッダファイル名を大文字にして.を_になってます。
これが一般的らしいです。少し特殊な文字列に見えるかもしれませんが
他のdefine定数と被らないよう配慮しての事だと思います。
他にも __MAIN_H__ などが一般的によく用いられています。

参考:http://www.geocities.jp/ky_webid/c/060.html



> あと、関数も私はヘッダーに書いてましたけど、
> 人のプログラムを見るとヘッダーに関数の名前、cppファイルにその関数の内容を書いてます。
> 普通はそうなんですか?

普通は、cppファイルに関数を書きます。
極論、ヘッダファイルはプロトタイプ宣言のみを行います。

kazuoni

Re:多重インクルードにういて

#3

投稿記事 by kazuoni » 15年前

> C++
> #pragma once

Visual C++のことですかね?
たしか、gccでも使えたような気がしますが・・・(嘘でしたら申し訳ありません。。)

Ma

Re:多重インクルードにういて

#4

投稿記事 by Ma » 15年前

>gccでも使えたような
使えなかったと思います。

代用として、

#ifdef tempNAME
#define tempNAME

<ここに中身。>

#endif

が使えたはずです。

たいちう

Re:多重インクルードにういて

#5

投稿記事 by たいちう » 15年前

× #ifdef tempNAME
○ #ifndef tempNAME

閉鎖

“C言語何でも質問掲示板” へ戻る