動作環境
C++ Builder XE4
概要
以下のような定義で、将来の修正時に100未満にしたらビルドエラーする。
#define MAXNUM_LINE (100)
code
Assertを使おうと思ったが、@SaitoAtsushi さんに教えていただいた方法と関連したコードが使えそうに思った。
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
#define MAXNUM_LINE (50)
#if MAXNUM_LINE < 100
#error "[MAXNUM_LINE] should be >= 100"
#endif
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
ビルド
bcc32 の "Unit1.cpp" コマンド ライン
...
[bcc32 致命的エラー] Unit1.cpp(16): F1003 error 指令: "[MAXNUM_LINE] should be >= 100"
失敗
経過時間: 00:00:00.1
何故100以上にしないといけないか、はコメントとして付記すると、未来の誰かにディスられない。
(エラーメッセージに理由を書くというのもいいことかもしれない)
@ プログラマが知るべき97のこと by Kevlin Henneyら
未来へのメッセージ by Linda Rising
彼に言いました。「自分の書くコードは、全部、未来の誰かへのメッセージだと思うのよ。その誰かは、あなたの弟さんかもしれない。誰か、とても賢い人に、自分が難しい問題をどう解いたのか、丁寧に説明するつもりで書くの」
static const int
#define
定義でなくstatic const int
定義の定数に対しても使える。
(訂正 2017/10/22)
C++ Builderではエラーが出るが、IDE固有のビルド方法でエラーを発しているだけかもしれない。
将来の移植時に「はまる」可能性があるため、static const int変数での使用はやめておいた方が良いように思う。