LoginSignup
0
1

More than 5 years have passed since last update.

C | C++ > #define定義が、ある数値未満でビルドエラーにする > #if MAXNUM_LINE < 100 と #error "[MAXNUM_LINE] should be >= 100" | static constでの使用はお薦めではない

Last updated at Posted at 2017-10-20
動作環境
C++ Builder XE4

概要

以下のような定義で、将来の修正時に100未満にしたらビルドエラーする。

#define MAXNUM_LINE (100)

code

Assertを使おうと思ったが、@SaitoAtsushi さんに教えていただいた方法と関連したコードが使えそうに思った。

参考: C > define多重定義のチェック > 3つまで > #if (defined(USE_CASE0)+defined(USE_CASE1)+defined(USE_CASE2)) != 1 #error "Wrong number of selected cases" #endif

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変数での使用はやめておいた方が良いように思う。

0
1
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1