C/C++プロジェクトのマクロについて - NetBeans IDEチュートリアル

このチュートリアルでは、NetBeans IDEの新機能を使用し、マクロを含むコードを検査およびデバッグする方法を示します。

目次

このページの内容は、NetBeans IDE 7.3および7.4に適用されます

要件

このチュートリアルに従うには、次のソフトウェアとリソースが必要です。

ソフトウェアまたはリソース 必須バージョン
NetBeans IDE バージョン7.3または7.4とNetBeans C/C++プラグイン
Java Developer Kit (JDK) バージョン6または7

必要なソフトウェアのダウンロードとインストールについては、NetBeans IDEのインストール手順およびC/C++/Fortran向けのNetBeans IDEの構成を参照してください。

マクロを使用するコードの検査

マクロはハイパーリンクされているため、[Ctrl]を押しながらクリックすると、IDEはマクロが定義されているヘッダー・ファイルを開きます。ただし、定数やリテラルのような単純なマクロの場合は、単にマクロ定義を見るだけのこともあります。

NetBeans IDEは、マクロを含むソース・コードを迅速に調べるために使用できる、2つの機能を提供します。

  • マクロ・ツールチップ。短くて単純なマクロの場合に便利です。
  • 「マクロの展開」ウィンドウ。より複雑なマクロの場合に便利です。

マクロ・ツールチップを使用した単純なマクロの操作

マクロ用のツールチップでは、別のファイルを開くことなく、小さなポップアップを表示できます。

展開が表示されるようにマクロ・ツールチップをアクティブ化するには:

  1. [Ctrl]+[Alt]を押したままにします。
  2. 展開するマクロの上にマウス・カーソルを置くと、次の図に示すとおり、ツールチップが開いて展開された情報が表示されます。

マクロ・ツールチップの展開

「マクロの展開」ウィンドウを使用した複雑なマクロの操作

マクロの展開表示を使用すると、複数の行からなる複雑なマクロを持つソース・コードを検査できます。マクロは定数の定義に使用されることがよくありますが、関数のように使用できるコード・フラグメントの定義にも使用されます。この方法で、マクロを使用するコードを操作する場合、コード内で起こることを把握するのが困難な場合があります。マクロをコールするソース・コードを使用して、コンテキスト内のマクロを調査する必要が生じることがあります。

マクロ・コードを展開した状態でソース・コードを表示すには:

  • マクロを右クリックし、ポップアップ・メニューから「ナビゲート」>「展開されたマクロを表示」を選択します。
    「マクロの展開」ウィンドウが開き、マクロをコールするコードのコンテキスト内で、展開されたマクロが表示されます。
  • [Ctrl]+[Alt]を押しながら目的のコードにマウス・ポインタを置き、ハイパーリンクをクリックして「マクロの展開」ウィンドウを開くこともできます。

次の図は、「マクロの展開」ウィンドウを示しています。

マクロの展開表示

「マクロの展開」ウィンドウでは、マクロのコンテキストは保護されたブロック内に配置されています。展開されたコードには意味解釈の強調表示が用意されています。「マクロの展開」ウィンドウのハイパーリンクを使用して、他のソース・ファイルに移動できます。マクロのパラメータ使用状況にも強調表示があります。

「マクロの展開」ウィンドウの左の列に、次のようないくつかのツールバー・ボタンが表示されます。

  • キャレット、内容、およびコンテキストを同期
    このオプションを使用すると、ソース・ファイルのキャレット位置と内容が「エディタ」ウィンドウおよび「マクロの展開」ウィンドウで同期します。
    また、「ローカル・コンテキストのみ展開」が選択されている場合、キャレット位置と関連付けるようにコンテキストが変更されます。
  • ローカル・コンテキストのみ展開。キャレットのあるコード・ブロック内のマクロのみが、「マクロの展開」ウィンドウで展開されます。
  • ファイル全体に渡って展開
    ソース・ファイル内のすべてのマクロが「マクロの展開」ウィンドウで展開されます。
  • 上/下矢印
    これらのボタンは、次のマクロ、または前のマクロにすばやく移動するために使用できます。

マクロを使用するコードのデバッグ

マクロの意味を理解しても、十分でないことがあります。
たとえば、次のコードをデバッグしていると想定します。

#include <stdlib.h>
#include <iostream>

#define ID_FIRST (0)
#define ID_ALICE (ID_FIRST)
#define ID_BOB (ID_ALICE + 1)
#define ID_TOM (ID_BOB + 1)
#define ID_FRINDS_NUMBER (ID_TOM + 1)

#define NEXT_PERSON(id) (id + 1)
#define PREV_PERSON(id) (id - 1)

using namespace std;

/*
* Main function
*/
int main(int argc, char** argv) {
int person = ID_TOM;
if (NEXT_PERSON(person) == ID_FRINDS_NUMBER) {
cout << "last person";
}
return (EXIT_SUCCESS);
}

デバッガをif文で停止し、プログラムが「last person」の値を出力するかどうかを確認するとします。

マクロの展開ツールチップに、ID_FRINDS_NUMBERが「(((((0))+1)+1)+1)」であることが表示されます。
ID_FRINDS_NUMBERはいくつになるでしょうか。この単純な例ではID_FRINDS_NUMBERの値は3であることが容易にわかりますが、2000人だった場合はこれほど簡単ではないはずです。

後述のように、デバッグの際にマクロの式を評価することが役に立つ場合があります。

ツールチップを使用したマクロの評価

デバッガでマクロのある式で式の評価を使用できます。
ID_FRINDS_NUMBERの上にマウス・ポインタを置くと、次の図のように示されます。

マクロの式の評価

式全体を選択してその上にマウス・ポインタを置き、次の図のようにツールチップ内の式を評価することもできます。

マクロの式の評価

ツールチップ内のマクロを評価するとプログラムの状態が変更されることがあるため、慎重に実行するようにしてください。たとえば、i++に展開されるマクロを評価すると、iが増分されます。

マクロの評価でのウォッチの使用

次の図のように、デバッガ・ウォッチでマクロを使用することが可能です。

マクロのデバッグ・ウォッチ

ウォッチ内のマクロを評価するとプログラムの状態が変わる可能性があるため、慎重に評価してください。たとえば、i++に展開されるマクロを評価すると、iが増分されます。

関連項目

NetBeans IDEでのC/C++/Fortranを使用した開発に関する詳細な記事は、C/C++の学習を参照してください。

get support for the NetBeans

Support


By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2018, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo