2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#define STRICTとは

2
Last updated at Posted at 2025-11-30

はじめに

C++でwin32APIを使う方法について調べているとサンプルコードの1行目からわからなかったので調べました。

#define STRICT
#include <windows.h>

#defineについて

CやC++において、コンパイルの前に行われるプロセッサ命令の一つで、マクロを定義してソースファイル内の文字列を置換します。

//マクロを定義
#define PI 3.14 //「PI」という文字列を「3.14」に置き換える

#include <bits/stdc++.h>
using namespace std;

int main() {
    cout << PI << endl; //3.14
    
    #undef PI 3.14 //置換を無効化
    
    cout << PI << endl; //エラー
}

詳しいことは下のページに書いていました。

#define STRICTについて

上の#defineと使い方が違うように見えます。
この#define STRICTはコンパイル時に厳密に型チェックを行うことを明示的に示します。
厳密な型チェックを指定することで、実行時エラーを減らすことにつながります。
逆に厳密な型チェックを無効にするには#define NO_STRICTを書きます。

どうやら古いWindowsの環境では厳密な型チェックがデフォルトで無効なため、win32APIを使うと登場するHWNDやHDCなどのHANDLE型がエラーを起こしていたようです。
だから#include <windows.h>の前に#define STRICTをというおまじないが生まれました。
現在はデフォルトで厳密な型チェックが行われますが、古い環境のことも考えると#define STRICTを最初に書く方が親切ということらしいです。

参考リンク

↓microsoftのページです。
https://learn.microsoft.com/ja-jp/windows/win32/winprog/enabling-strict
https://learn.microsoft.com/ja-jp/windows/win32/winprog/disabling-strict
https://learn.microsoft.com/ja-jp/windows/win32/winprog/strict-compliance

2
0
0

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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?