constの使い道が分かりません!
Posted: 2018年2月26日(月) 14:17
まさにマジックナンバーを避けるために定数を定義するんです。まるまる6734 さんが書きました:constを使用して定数として定義するプログラムを目にするのですが、なぜ定義するのでしょうか?
500という値を変更したい時、プログラム中にある500を全部探し出して変更するのでしょうか?(まあエディタがやってくれるので手間はかかりませんが)まるまる6734 さんが書きました:必要とあればその都度かけば良いものではないのでしょうか?(今回だったら500って書けば良い)
#ifdef _AFXDLL
#define DECLARE_DYNAMIC(class_name) \
protected: \
static CRuntimeClass* PASCAL _GetBaseClass(); \
public: \
static const CRuntimeClass class##class_name; \
static CRuntimeClass* PASCAL GetThisClass(); \
virtual CRuntimeClass* GetRuntimeClass() const; \
#define _DECLARE_DYNAMIC(class_name) \
protected: \
static CRuntimeClass* PASCAL _GetBaseClass(); \
public: \
static CRuntimeClass class##class_name; \
static CRuntimeClass* PASCAL GetThisClass(); \
virtual CRuntimeClass* GetRuntimeClass() const; \
#else
#define DECLARE_DYNAMIC(class_name) \
public: \
static const CRuntimeClass class##class_name; \
virtual CRuntimeClass* GetRuntimeClass() const; \
#define _DECLARE_DYNAMIC(class_name) \
public: \
static CRuntimeClass class##class_name; \
virtual CRuntimeClass* GetRuntimeClass() const; \
#endif
int XXX = 500;
char buf[XXX]; // C:*, C++:エラー
const int XXX = 500;
char buf[XXX]; // C:*, C++:OK
#define XXX 500
char buf[XXX]; // C:OK, C++:OK
*: C99 の可変長配列をコンパイラが実装していると OK、そうでないとエラー