FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
line

多重定義について

main.cpp

define.h

Character.h + .cpp

A.h + .cpp


今回はアルゴリズムではなくチーム制作ではよくある多重定義についてのメモ
ある時チーム制作だけではないんですがヘッダーによく付ける__○○_H__というまぁ重複インクルードを防ぐ処理ですね、あれをやっていたにもかかわらず重複だなんだと怒られました
ぶっちゃけ自分でもよくわかっていなかったので片っ端から当たったところ
ヘッダーでの作業は

× 変数の宣言・定義
× 変数の宣言
× 関数の宣言・定義
〇 関数の定義
〇 マクロの作成
〇 構造体の宣言
〇 クラスの宣言
〇 メンバ(インライン)関数の定義
× メンバ関数の定義
〇 externを使用した変数宣言
〇 staticを使用した変数宣言・定義
〇 staticを使用した変数宣言

というような感じになりました(×が多重定義になる可能性が高い・○が基本引っかからない)と言った感じです


変数は基本的に定義しない方がいいです、グローバルでどこからでも参照できるようにしたい場合はexternを使用すると良いです(externについては後日機会があれば・・・)


関数の宣言だけなら問題ないですが定義をヘッダーに書くとアウトです
クラスのメンバ関数などの定義もだめですが、インライン関数であるならば問題無いようです


クラスの宣言は問題ないです


上記のように重要な点を3つ書きましたが自分も今回テストしてみて色々と知れた気がしました
今まではとりあえずよく見かける#ifndef使っとけば問題ないでしょと思っていたのですが

#ifndefを使った方法は多重インクルードを防ぐものであり、多重定義は防ぐわけではないというものでした

そうですねぇ、今回は絵も描けないので何とも言えませんがこればかりは実際に試してみたほうがいいかもしれませんね

簡単に言うとヘッダーで定義するな!っていうような感じですかねw

今回externを使ったのですがこれも少し考える部分があったので少し研究したいと思います


ちなみに#ifndefを使用した重複インクルードの存在意味がわからない場合、今回のプログラムの__A_H__とかある部分を消してみて実行してみてください
宣言すら行えなくなります、とりあえず意味はわからなくてもこれ付けとけと言っていたある方のおっしゃっていた意味がわかった気がしないでもない。これ付けなきゃ始まらない気がするwww
スポンサーサイト
line
line

comment

管理者にだけ表示を許可する

line
line

FC2Ad

line
プロフィール

否健康食品オワタ

Author:否健康食品オワタ
27.142.178.77 (1)
27.142.178.77 (2)

2714217877.gif

line
最新記事
line
最新コメント
line
最新トラックバック
line
月別アーカイブ
line
カテゴリ
line
検索フォーム
line
RSSリンクの表示
line
リンク
line
ブロとも申請フォーム

この人とブロともになる

line
QRコード
QR
line
sub_line
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。