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

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

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

#1

投稿記事 by ボルト » 8年前

C(++)言語のマクロ#define 変数やマクロにスコア限定したいですが、
できます?

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

ボルト

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

#2

投稿記事 by ボルト » 8年前

C(++)言語の#define 変数やマクロをスコアに限定したいですが、
できます?

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 8年前
住所: 東海地方
連絡を取る:

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

#3

投稿記事 by softya(ソフト屋) » 8年前

ボルト さんが書きました:C(++)言語の#define 変数やマクロをスコアに限定したいですが、
できます?

できれば、方法をご教授お願い致します。
説明がよく分かりませんので、もう少し具体的に説明してもらえますか?
スコア → アンダースコア?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ボルト

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

#4

投稿記事 by ボルト » 8年前

ごめんなさい!

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

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

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

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

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

maru
記事: 150
登録日時: 8年前

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

#5

投稿記事 by maru » 8年前

#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;
}
のように定義されています。
上記のような方法に変えれば普通にスコープが適用されます。
スコープを限定する方法としては名前空間もあります。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 8年前
住所: 東海地方
連絡を取る:

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

#6

投稿記事 by softya(ソフト屋) » 8年前

C++ならmaruさんの書かれる方法がベストだと思います。
C言語の場合は、#undefがあるので、スコープというか#defineの有効範囲は限定することは可能です。
ヘッダに#defineを書いてしまうと#undefの記述が難しいのでソース内#define限定にしたほうが良いと思いますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ボルト

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

#7

投稿記事 by ボルト » 8年前

皆さん丁寧なご教授ほんとうにありがとうございます。
すっきりしました!

閉鎖

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