ページ 11

C(++)言語のマクロにスコアを付けたい

Posted: 2011年2月09日(水) 09:42
by ボルト
C(++)言語のマクロ#define 変数やマクロにスコア限定したいですが、
できます?

できれば、方法をご教授お願い致します。

Re: C(++)言語のマクロにスコアを付けたい[訂正]

Posted: 2011年2月09日(水) 09:44
by ボルト
C(++)言語の#define 変数やマクロをスコアに限定したいですが、
できます?

できれば、方法をご教授お願い致します。

Re: C(++)言語のマクロにスコアを付けたい[訂正]

Posted: 2011年2月09日(水) 11:56
by softya(ソフト屋)
ボルト さんが書きました:C(++)言語の#define 変数やマクロをスコアに限定したいですが、
できます?

できれば、方法をご教授お願い致します。
説明がよく分かりませんので、もう少し具体的に説明してもらえますか?
スコア → アンダースコア?

Re: C(++)言語のマクロにスコアを付けたい

Posted: 2011年2月10日(木) 08:42
by ボルト
ごめんなさい!

「スコア」-->「スコープ」です。

要は#define で定義したものが見える範囲の事です。

ソースファイル範囲か、class内か、あるいは"{ }"で指定した任意の範囲か。

それとも、#define の有効範囲は無限大でしょうか。

どうぞ宜しくお願い致します

Re: C(++)言語のマクロにスコアを付けたい

Posted: 2011年2月10日(木) 09:00
by maru
#define はプリプロセッサで処理して文字列の置き換えを行うものなのでスコープは
限定されないでしょう。単に出現順に処理されるだけです。

C++ではマクロはあまり推奨されていません。
マクロは単に文字列の置き換えなので型に対する情報が欠如しているからです。
定数の宣言は

コード:

const type_name variable_name = value;	// 定数の宣言
とし、max(),min()のような関数の形になるマクロは関数でインラインで記述するほうがよいでしょう。
実際にmix(), min()はc++では

コード:

template <class T>
inline const T& max(const T& a, const T& b)
{
	return a < b ? b : a;
}
template <class T>
inline const T& min(const T& a, const T& b)
{
	return b < a ? b : a;
}
のように定義されています。
上記のような方法に変えれば普通にスコープが適用されます。
スコープを限定する方法としては名前空間もあります。

Re: C(++)言語のマクロにスコアを付けたい

Posted: 2011年2月10日(木) 11:22
by softya(ソフト屋)
C++ならmaruさんの書かれる方法がベストだと思います。
C言語の場合は、#undefがあるので、スコープというか#defineの有効範囲は限定することは可能です。
ヘッダに#defineを書いてしまうと#undefの記述が難しいのでソース内#define限定にしたほうが良いと思いますが。

Re: C(++)言語のマクロにスコアを付けたい

Posted: 2011年2月10日(木) 13:08
by ボルト
皆さん丁寧なご教授ほんとうにありがとうございます。
すっきりしました!