Обзор макросов в проектах C/C++ - Практическое руководство по IDE NetBeans

В этом практическом руководстве описывается использование новых функций IDE NetBeans для инспектирования и отладки кода, включающего в себя макросы.

Содержание

Содержимое на этой странице применимо к IDE NetBeans 7.3 и 7.4

Требования

Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.

Программное обеспечение или материал Требуемая версия
IDE NetBeans версия 7.3 или 7.4 с подключаемым модулем NetBeans C/C++
Комплект для разработчика на языке Java (JDK) версия 6 или 7

Дополнительные сведения о загрузке и установке необходимого программного обеспечения см. в разделах Инструкции по установке IDE NetBeans и Настройка IDE NetBeans для C/C++/Fortran
.

Изучение кода, в котором используются макросы

Макросы содержат гиперссылки. Если нажать на ссылку, удерживая клавишу Ctrl, в IDE откроется файл заголовка, в котором определен данный макрос. Однако зачастую при работе с простыми макросами (например, числовыми константами или строковыми литералами) требуется ознакомиться только с определением макроса.

В IDE NetBeans реализованы две функции для быстрого просмотра исходного кода, содержащего макросы:

  • Всплывающие подсказки для макросов (используется для коротких и простых макросов)
  • Окно 'Расширение макроса' (используется для более сложных макросов)

Работа с простыми макросами с использованием всплывающих подсказок для макросов

С помощью всплывающих подсказок для макросов можно просмотреть всплывающее окно без открытия другого файла.

Для активации всплывающей подсказки макроса и просмотра его развернутого кода необходимо выполнить следующие действия:

  1. Нажмите и удерживайте сочетание клавиш Ctrl+Alt.
  2. Установите курсор мыши на макрос, который вы хотите развернуть. Отобразится всплывающая подсказка с развернутой информацией, как показано на рисунке.

Расширение подсказок макроса

Работа со сложными макросами в окне 'Расширение макроса'

В представлении 'Расширение макроса' можно просматривать исходный код со сложными макросами, состоящими из нескольких строк. Макросы в основном служат для определения констант, а также могут применяться для определения фрагментов кода, применяемых в качестве функций. При работе с кодом, в котором макросы используются подобным образом, может быть сложно понять то, какие процессы происходят в коде. Возможно, потребуется просмотр макроса в контексте исходного кода, вызывающего макрос.

Для просмотра исходного кода с развернутым кодом макроса выполните следующие действия:

  • Щелкните макрос правой кнопкой мыши и выберите команды "Navigate" ->"View Macro Expansion" из всплывающего меню.
    Откроется окно "Macro Expansion" для отображения развернутого кода макроса в контексте кода, вызывающего этот макрос.
  • Также можно навести курсор мыши на нужный код, удерживая клавиши CTRL+ALT, и нажать на гиперссылку. В результате откроется окно 'Расширение макроса'.

На приведенном ниже рисунке показано окно 'Расширение макроса'.

Представление расширения макроса

В окне "Macro Expansions" содержимое макросов находится в защищенных блоках. В развернутом коде присутствует семантическая подсветка. Гиперссылки в окне 'Расширение макроса' можно использовать для перехода к другим исходным файлам. Также в представлении выделены случаи использования параметров макроса.

В левом столбце окна "Macro Expansion" содержатся следующие кнопки панели инструментов:

  • Синхронизировать знак вставки, содержимое и контекст
    С помощью этого параметра можно синхронизировать позицию знака вставки и содержимого в исходном файле в окне редактора и в окне 'Расширение макроса'.
    Он также изменяет контекст таким образом, чтобы он был актуален для позиции знака вставки (только при выборе параметра "Expand local context only").
  • Expand local context only. В окне "Macro Expansion" развертываются только макросы, расположенные в блоке кода, в котором находится точка вставки.
  • Expand whole file
    В окне "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'.

Во всплывающей подсказке представления "Macro expansion" указано, что значениеID_FRINDS_NUMBER равно "(((((0))+ 1)+ 1)+ 1)".
Какое число скрывается за ID_FRINDS_NUMBER? В этой простой ситуации легко ответить, что значение ID_FRINDS_NUMBER равно 3, но если бы у нас было 2000 человек, все было бы гораздо сложнее.

В этом случае можно было бы оценить выражение в макросе при отладке, как описано ниже.

Оценка макросов с помощью всплывающих подсказок

В отладчике можно использовать оценку выражений в выражениях с макросами.
Наведите указатель мыши на элемент ID_FRINDS_NUMBER, и на экране появится информация, аналогичная информации на приведенной ниже иллюстрации:

Вычисление выражений макроса

Также можно выбрать все выражение и навести на него указатель мыши, чтобы оценка выражения отобразилась во всплывающей подсказке, как показано на рисунке:

Вычисление выражений макроса

Будьте внимательны при оценке макросов с помощью всплывающих подсказов, так как эта оценка может изменить состояние программы. Например, при оценке макроса, для которого развернутый код равен i++, значение i будет увеличено на 1.

Использование точек наблюдения при оценке макросов

Макросы можно использовать в точках наблюдения отладчика, как показано на рисунке:

Наблюдения за отладкой макроса

Будьте внимательны при оценке макросов с помощью точек наблюдения, так как эта оценка может изменить состояние программы. Например, при оценке макроса, для которого развернутый код равен i++, значение i будет увеличено на 1.

См. также

Дополнительные статьи о разработке с помощью C/C++/Fortran в IDE NetBeans см. в разделе Учебные карты 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