C++の#defineプリプロセッサとは?基本構文と使い方を解説
#defineは、C++のプリプロセッサディレクティブの一つで、マクロを作成するために使われます。マクロとは、識別子(または引数付きの識別子)とトークン文字列を関連付ける仕組みのことです。マクロを定義すると、コンパイラはソースファイル内でその識別子が出現するたびに、対応するトークン文字列へ自動的に置き換えます。
基本構文
#define 識別子 トークン文字列
#defineディレクティブを記述すると、コンパイラはソースファイル内でその識別子が使われているすべての場所を、指定したトークン文字列で置き換えます。
ただし、置換が行われるのは識別子が独立したトークンとして認識される場合だけです。つまり、次のようなケースでは置換されません。
- コメント文中に出現した場合
- 文字列リテラル(ダブルクォートで囲まれた部分)の中に出現した場合
- より長い別の識別子の一部として出現した場合
コード例
以下は、#defineを使って定数マクロを定義し、計算に利用するシンプルな例です。
#include<iostream>
#define MY_VAR 55
using namespace std;
int main() {
int x = 10;
cout << x + MY_VAR; // 前処理後、この式は「x + 55」になります
return 0;
}
実行結果
このプログラムを実行すると、次の出力が得られます。
65
コンパイル前の前処理段階で、x + MY_VARという式はx + 55に展開されるため、10 + 55 の計算結果である「65」が出力されます。
補足:モダンC++ではconstexprが推奨されることも
#defineによる定数定義は型情報を持たず、スコープの概念もないため、意図しない置換やバグの原因になることがあります。モダンC++では、単純な定数にはconstやconstexprを使う方が型安全で推奨される場合が多い点も覚えておくと良いでしょう。
#defineディレクティブの詳細については、MSDNの公式ドキュメント(https://docs.microsoft.com/en-us/cpp/preprocessor/hash-define-directive-c-cpp)をご参照ください。
-
C++のconstキーワードとは?定数宣言の基本とメリットを解説
C++におけるconstは、変数を「定数」として宣言するための型修飾子です。const付きで宣言された変数は、一度初期化するとその値を後から変更することができません。 constを使うメリット constを使用する最大の利点は、プログラム内で値が意図せず書き換えられるのを防げることです。例えば、円周率(PI)のような不変の値を扱う場合、プログラムのどの部分からもその値が変更されないようにしたいはずです。このような値はconstとして宣言しておくことで、誤った代入から守ることができます。 コンパイラの最適化との関係 const修飾された型を持つオブジェクトは、コンパイラによって読み取り専用メ
-
C#に欠けているC++の機能とは?両言語の主な違いを徹底解説
C#は、Microsoftがアンダース・ヘルスバーグ(Anders Hejlsberg)の主導のもと、.NET構想の一環として開発した、シンプルでモダンな汎用オブジェクト指向プログラミング言語です。一方のC++は、1979年にベル研究所でビャーネ・ストロヴストルップ(Bjarne Stroustrup)によって開発が始められた中間レベルのプログラミング言語で、WindowsやmacOS、さまざまなUNIX系OSなど、幅広いプラットフォーム上で動作します。C#に存在しないC++の主な機能C++にはありながら、C#では実現できない、あるいは扱いが異なる主なポイントは以下のとおりです。多重継承:C+