C/C++ プロジェクトのマクロについて - NetBeans IDE 6.7/6.8 チュートリアル
執筆:
Nikolay Krasilnikov
2009 年 6 月 [リビジョン番号: V6.7--1]
このチュートリアルでは、NetBeans IDE 6.7/6.8/6.9 の新機能を使用し、マクロを含むコードを検査およびデバッグする方法を示します。
目次
要件
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
必要なソフトウェアのダウンロードとインストールについては、「NetBeans IDE 6.8 のインストール 」および「C/C++/Fortran 向けの NetBeans IDE の構成 」を参照してください。 必要なソフトウェアのダウンロードとインストールに役立ててください。
マクロを使用するコードの検査
以前のバージョンの NetBeans IDE では、マクロにハイパーリンクが設定されていたため、それらをクリックして展開を確認することができました。この操作により、マクロが定義されているヘッダーファイルが IDE で開かれるようになっていました。この方法は、定数や文字列定数のような単純なマクロの定義を見るだけの場合、便利ではありませんでした。
NetBeans IDE 6.7 では、マクロを含むソースコードを調べるために使用できる、2 つの機能が導入されました。
マクロツールチップ。短くて単純なマクロの場合に便利です。
マクロの展開表示。より複雑なマクロの場合に便利です。
マクロツールチップを使用した単純なマクロの操作
マクロ用のツールチップでは、別のファイルを開くことなく、小さなポップアップを表示できます。
展開が表示されるようにマクロツールチップを有効にするには、次の手順に従います。
Ctrl-Alt キーを押します。
展開するマクロにマウスカーソルを合わせると、ツールチップが開いて展開された情報が表示されます。
詳細を表示するには、Ctrl-Alt キーを押しながらマクロをクリックすると、「マクロの展開」ウィンドウが開き、その関数と展開されたマクロが表示されます。
マクロの展開表示を使用した複雑なマクロの操作
マクロの展開表示を使用すると、複数の行からなる複雑なマクロを持つソースコードを検査できます。マクロは定数の定義に使用されることがよくありますが、関数のように使用できるコードフラグメントの定義にも使われます。この方法で、マクロを使用するコードを操作する場合、コード内で起こることを把握するのが困難な場合があります。マクロを呼び出すソースコードを使用して、コンテキスト内のマクロを調査する必要が生じることがあります。
マクロコードを展開した状態でソースコードを表示するには、次の手順に従います。
マクロを右クリックし、ポップアップメニューから「ナビゲート」>「展開されたマクロを表示」を選択します。
「マクロの展開」ウィンドウが開き、マクロを呼び出すコードのコンテキスト内で、展開されたマクロが表示されます。
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 関数
*/
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) 」であることが表示されます。
この数はいくつになるでしょうか。この単純な例では 3 であることが簡単にわかります。これが 2000 人だった場合はどうでしょうか。
ツールチップを使用したマクロの評価
次に、マクロのある式でも式の評価を使用できることを試します。
ID_FRINDS_NUMBER の上にマウスを移動すると、次のように表示されます。
また、次のように式全体を評価することもできます。
ツールチップ内のマクロを評価するとプログラムの状態が変更されることがあるため、慎重に実行するようにしてください。たとえば、i++ に展開されるマクロを評価すると、i が増分されます。
マクロの評価でのウォッチの使用
ここでは、次のようにデバッガウォッチでマクロを使用できます。
ウォッチ内のマクロを評価するとプログラムの状態が変わる可能性があるため、慎重に行なってください。たとえば、i++ に展開されるマクロを評価すると、i が増分されます。