corner imagecorner image
IDEPlatformPluginsDocs & SupportCommunityPartners

了解 C/C++ 项目中的宏 - NetBeans IDE 6.7 教程

本教程将向您介绍如何使用 NetBeans IDE 6.7 的新增功能检查和调试包含宏的代码。

目录

本页上的内容适用于 NetBeans IDE 6.7

要求

要学习本教程,您需要具备以下软件和资源。

软件或资源 要求的版本
NetBeans IDE 带有 NetBeans C/C++ 插件模块的版本 6.7
Java Developer Kit (JDK) 版本 6 或版本 5
C 和 C++ 编译器、makegdb

经测试可以与 NetBeans IDE 配合使用的 C/C++ 工具集合

请参见 NetBeans IDE 6.7 安装说明配置 NetBeans IDE 以使用 C/C++/Fortran
以获取有关下载并安装所需软件的信息。

检查使用宏的代码

在以前版本的 NetBeans IDE 中,宏都具有超级链接,以便您可以通过在其上单击来查看其扩展,该操作将使 IDE 打开在其中定义宏的头文件。对于简单的宏(如数值常量或字符串型),如果您只想快速地查看其定义,这种方法并不方便。

NetBeans IDE 6.7 提供了两项新增功能,用于浏览包含宏的源代码:

  • 宏工具提示(适用于简短的宏)
  • 宏扩展视图(适用于较复杂的宏)

使用宏工具提示处理简单的宏

使用宏工具提示,可以在小型的弹出式窗口中进行查看,而无需打开另一个文件。

要激活宏工具提示以便查看其扩展,请执行以下操作:

  1. 按 Ctrl+Alt 组合键。
  2. 将鼠标光标置于要扩展的宏上,随即会打开一个工具提示以显示扩展信息。
  3. 如需更多信息,请在按 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 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)"。
棒极了,但它是多少呢?在这种简单的情况下,很容易说出结果为 3,但是如果有两千人呢?

使用工具提示计算宏

现在,也可以对包含宏的表达式使用表达式求值。
只要将鼠标悬停在 ID_FRINDS_NUMBER 上,您就会看到:

宏表达式求值

此外,还可以计算整个表达式的值:

宏表达式求值

在工具提示中计算宏时务必要小心,因为这种求值方式可能会更改程序的状态。例如,在计算扩展为 i++ 的宏时,将递增 i 的值。

使用监视计算宏

现在,可以在调试器监视中使用宏:

宏调试监视

在监视中计算宏时务必要小心,因为这种求值方式可能会更改程序的状态。例如,在计算扩展为 i++ 的宏时,将递增 i 的值。