C(++)言語のマクロ#define 変数やマクロにスコア限定したいですが、
できます?
できれば、方法をご教授お願い致します。
C(++)言語のマクロにスコアを付けたい
Re: C(++)言語のマクロにスコアを付けたい[訂正]
C(++)言語の#define 変数やマクロをスコアに限定したいですが、
できます?
できれば、方法をご教授お願い致します。
できます?
できれば、方法をご教授お願い致します。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: C(++)言語のマクロにスコアを付けたい[訂正]
説明がよく分かりませんので、もう少し具体的に説明してもらえますか?ボルト さんが書きました:C(++)言語の#define 変数やマクロをスコアに限定したいですが、
できます?
できれば、方法をご教授お願い致します。
スコア → アンダースコア?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C(++)言語のマクロにスコアを付けたい
ごめんなさい!
「スコア」-->「スコープ」です。
要は#define で定義したものが見える範囲の事です。
ソースファイル範囲か、class内か、あるいは"{ }"で指定した任意の範囲か。
それとも、#define の有効範囲は無限大でしょうか。
どうぞ宜しくお願い致します
「スコア」-->「スコープ」です。
要は#define で定義したものが見える範囲の事です。
ソースファイル範囲か、class内か、あるいは"{ }"で指定した任意の範囲か。
それとも、#define の有効範囲は無限大でしょうか。
どうぞ宜しくお願い致します
Re: C(++)言語のマクロにスコアを付けたい
#define はプリプロセッサで処理して文字列の置き換えを行うものなのでスコープは
限定されないでしょう。単に出現順に処理されるだけです。
C++ではマクロはあまり推奨されていません。
マクロは単に文字列の置き換えなので型に対する情報が欠如しているからです。
定数の宣言は とし、max(),min()のような関数の形になるマクロは関数でインラインで記述するほうがよいでしょう。
実際にmix(), min()はc++では
のように定義されています。
上記のような方法に変えれば普通にスコープが適用されます。
スコープを限定する方法としては名前空間もあります。
限定されないでしょう。単に出現順に処理されるだけです。
C++ではマクロはあまり推奨されていません。
マクロは単に文字列の置き換えなので型に対する情報が欠如しているからです。
定数の宣言は とし、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
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: C(++)言語のマクロにスコアを付けたい
C++ならmaruさんの書かれる方法がベストだと思います。
C言語の場合は、#undefがあるので、スコープというか#defineの有効範囲は限定することは可能です。
ヘッダに#defineを書いてしまうと#undefの記述が難しいのでソース内#define限定にしたほうが良いと思いますが。
C言語の場合は、#undefがあるので、スコープというか#defineの有効範囲は限定することは可能です。
ヘッダに#defineを書いてしまうと#undefの記述が難しいのでソース内#define限定にしたほうが良いと思いますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。