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

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

目录

此页上的内容适用于 NetBeans IDE 7.3 和 7.4

要求

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

软件或资源 要求的版本
NetBeans IDE 带有 NetBeans C/C++ 插件的版本 7.3 或 7.4
Java 开发者工具包 (JDK) 版本 6 或 7

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

检查使用宏的代码

宏显示为超链接,因此当您按住 Ctrl 键单击宏时,IDE 将打开定义宏的头文件。但有时对于简单的宏(例如数值常量或字符串型),您可能只想快速地查看宏定义。

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

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

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

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

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

  1. 按住 Ctrl+Alt 组合键。
  2. 将鼠标光标置于要扩展的宏上,随即会打开一个工具提示以显示扩展信息,如下图中所示。

宏工具提示扩展

使用宏扩展窗口处理复杂的宏

使用宏扩展视图,可以检查包含复杂的多行宏的源代码。宏通常用于定义常量,但也可用于定义使用方法与函数类似的代码片段。在处理以这种方式使用宏的代码时,可能很难理解该代码所执行的操作。您可能需要在调用宏的源代码的上下文中检查该宏。

要查看包含扩展宏代码的源代码,请执行以下操作:

  • 右键单击该宏,然后从弹出式菜单中选择 "Navigate -> View Macro Expansion"(导航 -> 查看宏扩展)。
    "Macro Expansion"(宏扩展)窗口随即打开,其中在调用扩展宏的代码的上下文中显示了该宏。
  • 您也可以按 Ctrl+Alt 组合键,同时将鼠标光标置于要查看的代码上,然后单击超链接以打开 "Macro Expansion"(宏扩展)窗口。

下图显示了 "Macro Expansion"(宏扩展)窗口。

宏扩展视图

在 "Macro Expansion"(宏扩展)窗口中,宏内容位于保护块内。对于扩展的代码,提供了语义突出显示功能。可以使用 "Macro Expansion"(宏扩展)窗口中的超链接转至其他源文件。此外,还对使用的宏参数进行了突出显示。

"Macro Expansion"(宏扩展)窗口的左边栏包含一些工具栏按钮:

  • 使脱字号、内容和上下文同步
    此选项可使编辑器窗口和 "Macro Expansion"(宏扩展)窗口中源文件内的脱字号位置和内容保持同步。
    它还会更改上下文以使其与脱字号的位置相关(如果选择了 "expand local context only"(仅扩展本地上下文))。
  • 仅扩展本地上下文:仅在 "Macro Expansion"(宏扩展)窗口中扩展脱字号所在的代码块中的宏。
  • 扩展整个文件:
    在 "Macro Expansion"(宏扩展)窗口中扩展源文件中的所有宏。
  • 向上箭头和向下箭头:
    使用这些按钮可以快速导航至下一个宏或上一个宏。

调试使用宏的代码

有时,只理解宏的含义是不够的。
例如,假定您要调试以下代码:

#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,但是如果有两千人,就不会这么容易了。

您可能会发现它对于在调试时估算宏中的表达式会非常有用,如下所述。

使用工具提示估算宏

可以在调试器中对包含宏的表达式使用表达式求值。
将鼠标指针悬停在 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