// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Внесение изменений и переходы в файлах исходных кодов на C/C++ - учебный курс по среде IDE NetBeans
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Внесение изменений и переходы в файлах исходных кодов на C/C++ - учебный курс по среде IDE NetBeans - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Внесение изменений и переходы в файлах исходных кодов на C/C++ - учебный курс по среде IDE NetBeans

_Составитель _Энн Райс (Ann Rice)_, редактор _Сьюзан Морган (Susan Morgan)_ 
Март 2013 г._ [Номер редакции: V8.0]

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


== Требования

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

|===
|Программное обеспечение или материал |Требуемая версия 

|IDE NetBeans |link:https://netbeans.org/downloads/index.html[+ версия 7.4 или 8.0 с подключаемым модулем NetBeans C/C+++] 

|Комплект для разработчика на языке Java (JDK) |link:http://java.sun.com/javase/downloads/index.jsp[+версия 7 или 8+] 
|===


Ознакомьтесь с разделами link:../../../community/releases/80/install.html[+Указания по установке среды IDE NetBeans 8.0+] и link:../../../community/releases/80/cpp-setup-instructions.html[+Настройка среды IDE NetBeans для C/C++/Фортрана+]
для получения сведений о загрузке и установке требуемого программного обеспечения.

*Примеры проектов*

Чтобы поэкспериментировать с проектами, выберите в среде IDE команду "Файл" > "Новый проект", а затем откройте категорию "Примеры" и подкатегорию "C/C++". В среде IDE представлено несколько примеров проектов на языке C и C++, которые помогут ознакомиться с функциями среды.


== Создание примера проекта

Подключаемый модуль NetBeans IDE с C/C++ предоставляет расширенные возможности редактирования для изменения исходного кода. Для наглядного рассмотрения этих функций в этом учебном курсе используется проект  ``Quote`` . Если проект еще не создан, выполните следующие действия:

1. Выберите команду "Файл" > "Новый проект".
2. Разверните в мастере создания проекта категорию "Примеры" и выберите подкатегорию "C/C++".
3. Выберите проект  ``Quote`` . Нажмите кнопку "Далее", а затем нажмите кнопку "Готово".


== Изменение исходных файлов на языке C и C++


=== Установка стиля форматирования

Окно "Параметры" по умолчанию используется для настройки стиля форматирования проектов на языке C и C++.

1. Выберите команду "Сервис" > "Параметры".
2. Нажмите элемент "Редактор" на верхней панели окна.
3. Выберите вкладку "Форматирование".
4. Выберите в раскрывающемся списке "Язык" язык C++, поскольку в проекте Quote используется язык C++.
5. Выберите в раскрывающемся списке "Стиль" необходимый стиль.
image::images/formatting_style.png[]

[start=6]
. Измените свойства стиля требуемым образом.


=== Свертывание блоков кода в файлах C и C++

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

1. Откройте в проекте приложения  ``Quote_1``  папку "Source Files" и дважды щелкните файл  ``cpu.cc`` , чтобы открыть его в редакторе исходного кода.
2. Щелкните в левом поле значок свертывания (небольшое поле со знаком "-"), чтобы свернуть код одного из методов.
3. Наведите курсор на символ  ``{...}``  справа от свернутого блока для отображения кода блока. 
image::images/code_folding.png[]


=== Использование семантического выделения

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

1. Выберите команду "Сервис" > "Параметры".
2. Нажмите элемент "Редактор" на верхней панели окна.
3. Выберите вкладку "Выделение".
4. Убедитесь, что все флажки установлены.
5. Нажмите кнопку "ОК".
6. Обратите внимание, что в файле  ``customer.cc``  проекта  ``Quote_1``  имена методов выделены жирным.
7. Щелкните вхождение класса  ``Customer`` .
8. Все вхождения класса  ``Customer``  в файле будут выделены желтым цветом. В правом поле также отображаются отметки, указывающие расположение вхождений в файле. Отметки позволяют оценить число вхождений в файле без прокручивания. Чтобы перейти ко вхождению, следует щелкнуть необходимую отметку.
image::images/highlighting1.png[]

[start=9]
. Для легкого перехода между вхождениями нажимайте клавиши Alt+Down, чтобы перейти к следующему вхождению, и Alt+Up, чтобы перейти к предыдущему вхождению.

[start=10]
. Откройте файл  ``customer.h`` , расположенный в папке "Headers", и обратите внимание, что имена методов снова выделены жирным.
image::images/highlighting2.png[]


=== Работа с автозавершением кода и документированием

Среда IDE имеет функцию динамического автозавершения кода на языке C и C++, благодаря которой при вводе одного или нескольких символов выводится список возможных классов, методов, переменных и т.д., которые можно использовать для завершения выражения.

Также в среде IDE выполняется динамический поиск документации классов, функций, методов и пр., а также отображение документации во всплывающем окне.

1. Откройте файл в проекте  ``Quote_1``   ``quote.cc`` .
2. Введите в первой пустой строчке файла  ``quote.cc``  заглавную латинскую букву "C" и нажмите сочетание клавиш CTRL+ПРОБЕЛ. Появится окно автозавершения кода с небольшим списком, включающем классы  ``Cpu``  и  ``Customer`` . Также отобразится окно документации с сообщением "Документация не найдена", поскольку исходный код проекта не содержит документации по коду.
3. Разверните список элементов, снова нажав CTRL+ПРОБЕЛ. 
image::images/code_completion1.png[]

[start=4]
. Используйте клавиши со стрелками или кнопки мыши для выделения стандартной функции библиотеки (например,  ``calloc`` ) из списка. В окне документации появится страница системной справки для этой функции, если эта страница доступна для среды IDE. 
image::images/code-completion-documentation.png[]

[start=5]
. Выберите класс  ``Customer``  и нажмите ENTER.

[start=6]
. Заполните новый экземпляр класса  ``Customer`` , введя текст  ``andrew;`` . Введите в следующей строке латинскую букву  ``a``  и нажмите CTRL+ПРОБЕЛ. Появится окно автозавершения кода со списком возможных элементов с начальной буквой  ``a`` , например аргументы метода, поля класса и глобальные имена, доступные в текущем контексте.
image::images/code_completion2.png[]

[start=7]
. Дважды щелкните параметр  ``andrew`` , чтобы принять его и ввести после него точку. Нажмите Ctrl-пробел, и будет выведен список общедоступных методов и полей класса  ``Customer`` .
image::images/code_completion3.png[]

[start=8]
. Удалите добавленный код.


=== Добавление документации к исходному коду

Можно добавить в код комментарии для автоматического создания документации к функциям, классам и методам. Среда IDE распознает комментарии с синтаксисом Doxygen и автоматически создает документацию. Также среда IDE может автоматически создавать блок комментариев для документирования функции под комментарием.

1. Наведите курсор в файле  ``quote.cc``  на строку 75 или на строку, расположенную выше. 
 ``int readNumberOf(const char* item, int min, int max) {`` 

[start=2]
. Введите косую черту и две звездочки, а затем нажмите ENTER. Редактор вставляет комментарий, отформатированный по синтаксису Doxygen, для класса  ``readNumberOf`` . 
image::images/doxygen_comment.png[]

[start=3]
. Добавьте текст описания в каждую строку аннотации @param и сохраните файл. 
image::images/doxygen_comment_edited.png[]

[start=4]
. Щелкните класс  ``readNumberOf``  для выделения его желтым и щелкните одну из отметок вхождений справа для перехода к области использования класса.

[start=5]
. Щелкните класс  ``readNumberOf``  в строке, к которой выполнен переход, и нажмите сочетание клавиш CTRL+SHIFT+ПРОБЕЛ для отображения документации, добавленной для параметров.
image::images/doxygen_displayed.png[]

[start=6]
. Щелкните в любом месте файла, чтобы закрыть окно документации, а затем щелкните класс  ``readNumberOf``  повторно.

[start=7]
. Выберите "Исходный код" > "Показать документацию", чтобы снова открыть окно документации для класса.


=== Использование шаблонов кода

В редакторе исходного кода существует набор настраиваемых шаблонов кода со стандартными фрагментами кода на C и C++. Можно создать полный фрагмент кода путем ввода его сокращения и нажатия клавиши Tab. Например, в файле  ``quote.cc``  проекта  ``Quote`` :

1. Введите  ``uns``  с последующим нажатием клавиши Tab, и  ``uns``  развернется до  ``unsigned`` .
2. Введите  ``iff``  с последующим нажатием клавиши Tab, и  ``iff``  развернется до  ``if (exp) {}`` .
3. Введите  ``ife``  с последующим нажатием клавиши Tab, и  ``ife``  развернется до  ``if (exp) {} else {}`` .
4. Введите  ``fori``  с последующим нажатием клавиши Tab, и  ``fori``  развернется до  ``for (int i = 0; i < size; i++) { Object elem = array[i];`` .

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

1. Выберите команду "Сервис" > "Параметры".
2. В диалоговом окне 'Параметры' щелкните 'Редактор' и щелкните вкладку 'Шаблолны кода'.
3. В раскрывающемся списке "Язык" выберите необходимый язык.
image::images/code_templates.png[]


=== Подстановка парных символов

При редактировании исходных файлов на языках C и C++ редактор исходного кода выполняет "интеллектуальную" подстановку парных символов, например кавычек, круглых и квадратных скобок. При вводе одного из символов редактор исходного кода автоматически подставляет закрывающий символ.

1. В проекте  ``Quote_1``  поместите курсор в пустую строку 115 файла  ``module.cc``  и нажмите клавишу Return для добавления новой строки.
2. Введите  ``enum state {``  и нажмите ENTER. Закрывающая фигурная скобка и точка с запятой будут добавлены автоматически, а курсор будет размещен в строке между скобками.
3. Введите  ``invalid=0, success=1``  в строке в квадратных скобках для завершения перечисления.
4. В строке после закрывающей фигурной скобки  ``};``  перечисления введите  ``if (``  закрывающая круглая скобка добавляется автоматически, и курсор оказывается внутри скобок).
5. Введите  ``v==null``  в круглых скобках. Затем введите  `` {``  и добавьте новую строку после правой круглой скобки. Закрывающая квадратная скобка будет добавлена автоматически.
6. Удалите добавленный код.


=== Поиск текста в файлах проекта

Вы можете использовать диалоговое окно 'Поиск текста в файлах проекта' для поиска в проектах экземпляров указанного текста или регулярных выражений.

1. Откройте диалоговое окно 'Поиск текста в файлах проекта', выполнив одно из следующих действий:
* Выберите 'Правка' > 'Найти в проектах'
* Щелкните правой кнопкой мыши проект в окне "Проекты" и выберите команду "Найти".
* Нажмите Ctrl+Shift+F.

[start=2]
. В диалоговом окне "Найти в проектах" перейдите на вкладку "Список по умолчанию" или на вкладку "Grep". На вкладке 'Grep' используется служебная программа  ``grep`` , обеспечивающая более быстрый поиск, особенно для удаленных проектов. 
image::images/find_in_projects.png[]

[start=3]
. На вкладке Grep введите искомый текст или регулярное выражение, укажите область поиска и шаблон имени файла и установите флажок 'Открыть в новой вкладке'. Это позволит сохранить несколько результатов поиска на отдельных вкладках.

[start=4]
. Нажмите 'Найти'.
На вкладке 'Результаты поиска' перечислены файлы, в которых найдены текст или регулярные выражения.

С помощью кнопок в левой части окна можно изменить представление результатов поиска.

image::images/find_in_projects2.png[]

[start=5]
. Нажмите кнопку 'Развернуть/Свернуть', чтобы свернуть список файлов. При этом будут отображаться только имена файлов. Другие кнопки предназначены для отображения результатов поиска в виде дерева каталогов или в виде списка файлов. Эти функции удобно использовать при поиске по нескольким проектам.

[start=6]
. Дважды щелкните один из элементов в списке. Среда IDE перемещает вас на соответствующую позицию в редакторе исходного кода.


== Переход по исходным файлам на C и C++

Подключаемый модуль NetBeans IDE с C/C++ предоставляет расширенные возможности навигации для просмотра исходного кода. Чтобы изучить эти функции, продолжайте использовать проект  ``Quote_1`` .


=== Использование окна классов

Окно классов позволяет просматривать все классы проекта, а также члены и поля каждого класса.

1. Выберите вкладку "Классы" для просмотра окна классов. Если вкладка "Классы" не отображается, выберите 'Окно' > 'Классы'
2. Разверните узел  ``Quote_1``  в окне классов. Выводится список всех классов проекта.
3. Разверните класс  ``Customer`` . 
image::images/classes_window.png[]

[start=4]
. Дважды щелкните переменную  ``name`` , чтобы открыть файл заголовка  ``customer.h`` .


=== Использование окна навигатора

Окно навигатора предоставляет компактное представление выбранного в настоящий момент файла и упрощает процедуру перехода между различными частями файла. Если окно навигатора не отображается, выберите команду "Окно" > "Навигация" > "Навигатор", чтобы открыть его.

1. Щелкните в любом месте окна редактора файла  ``quote.cc`` .
2. В окне навигатора отобразится компактное представление файла.
image::images/navigator_window.png[]

[start=3]
. Для перехода к определенному элементу файла дважды щелкните его в окне навигатора, а курсор в окне редактора переместится к этому элементу.

[start=4]
. Щелкните правой кнопкой мыши в окне навигатора, чтобы выбрать другой способ сортировки элементов, группировку элементов или их фильтрацию.

Для получения сведений о назначении значков в окне навигатора воспользуйтесь интерактивной справкой по среде IDE. Для этого выберите команду "Справка" > "Содержание справки" и введите в поле поиска окна справки "значки навигатора".


=== Поиск мест использования класса, метода и поля

Окно "Случаи использования" применяется для просмотра класса (структуры), функции, переменной, макроса или файла, которые используются в исходном коде проекта.

1. Щелкните правой кнопкой мыши в файле  ``customer.cc``  класс  ``Customer``  в строке 42, и выберите команду "Найти случаи использования".
2. Нажмите в диалоговом окне "Найти случаи использования" кнопку "Найти".
3. Появится окно "Случаи использования" со случаями использования класса  ``Customer``  в исходных файлах проекта.
image::images/usages_window.png[]

[start=4]
. Кнопки со стрелками в левой части окна предназначены для перехода между вхождениями и их отображения в редакторе, а также для переключения представления с логического на физическое и наоборот. Также можно фильтровать данные с помощью второго вертикального ряда кнопок в левой части окна.


=== Работа с графиком вызовов

В окне "Граф вызовов" отображаются два представления отношений вызовов между функциями проекта. В древовидном представлении отображаются функции, вызванные из выбранной функции, или функции, вызывающие выбранную функцию. Графическим представлением отношений вызовов служат стрелки между вызываемыми и вызывающими функциями.

1. В файле  ``quote.cc``  щелкните правой кнопкой мыши в функции  ``main``  и выберите 'Показать график вызовов'.
2. Откроется окно "Граф вызовов" с деревом и графическим представлением всех функций, вызванных из функции  ``main`` .
image::images/call_graph1.png[]

Если отображаются не все функции, приведенные на рисунке выше, нажмите в окне "Граф вызовов" третью кнопку слева для вывода элементов, вызванных из данной функции.


[start=3]
. Разверните узел  ``endl``  для отображения функций, вызванных этой функцией. Обратите внимание, что график обновляется для дополнительного вывода функций, вызванных функцией  ``endl`` .

[start=4]
. Нажмите вторую кнопку 'Фокусировать' в левой части окна для перемещения фокуса к функции  ``endl`` , затем нажмите четвертую кнопку 'Кто вызывает эту функцию', чтобы просмотреть все функции, вызывающие функцию  ``endl`` . 
image::images/call_graph2.png[]

[start=5]
. Разверните несколько узлов дерева для просмотра большего числа функций.
image::images/call_graph3.png[]


=== Работа с гиперссылками

Функция перехода по гиперссылкам позволяет переходить от вызова класса, метода, переменной или константы к их объявлению и от объявления к определению. Кроме того, гиперссылки позволяют переходить от переопределяемого метода к переопределяющему и наоборот.

1. В файле  ``cpu.cc``  проекта  ``Quote_1``  наведите курсор мыши на строку 37, нажав клавишу CTRL. Функция  ``ComputeSupportMetric``  будет выделена, а в аннотации будут выведены сведения о данной функции.
image::images/hyperlinks1.png[]

[start=2]
. Щелкните гиперссылку, и в окне редактора будет выполнен переход к определению функции.
image::images/hyperlinks2.png[]

[start=3]
. Наведите курсор на определение, нажав клавишу CTRL, и щелкните ссылку. В редакторе будет выполнен переход к объявлению функции в файле заголовка  ``cpu.h`` .
image::images/hyperlinks3.png[]

[start=4]
. Нажмите на панели редактора стрелку влево (вторая кнопка слева), и редактор снова перейдет к определению в файле  ``cpu.cc`` .

[start=5]
. Наведите курсор мыши на зеленый круг в левом поле и просмотрите аннотацию, указывающую, что данный метод переопределяет другой метод.
image::images/overide_annotation.png[]

[start=6]
. Щелкните зеленый круг для перехода к переопределенному методу: будет выполнен переход к файлу заголовка  ``module.h`` . В это файле на полях отображается серый круг, указывающий на то, что метод переопределен.

[start=7]
. Щелкните серый круг, и в окне редактора появится список методов, переопределяющих этот метод.
image::images/overridden_by_list.png[]

[start=8]
. Щелкните элемент  ``Cpu::ComputeSupportMetric``  для обратного перехода к объявлению метода в файле заголовка  ``cpu.h`` .


=== Работа с иерархией Includes

Окно "Иерархия Includes" позволяет просматривать все файлы заголовков и исходные файлы, которые напрямую или косвенно включены в исходный файл, или все исходные файлы и файлы заголовков, которые напрямую или косвенно включают по #include файл заголовка.

1. Откройте в проекте  ``Quote_1``  в окне редактора файл  ``module.cc`` .
2. Щелкните правой кнопкой мыши строку  ``#include "module.h"``  в файле и выберите команду "Переход" > "Просмотреть иерархию Includes".
3. По умолчанию окно "Иерархия" представляет собой список файлов, напрямую включающих файл заголовка. Нажмите крайнюю правую кнопку в нижней части окна для изменения представления на древовидное. Нажмите вторую кнопку справа, чтобы изменить представление для всех включаемых и включающих файлов. Разверните узлы дерева для просмотра всех исходных файлов, включающих файл заголовка.
image::images/includes_hierarchy.png[]


=== Работа с иерархией типов

Окно "Иерархия типов" позволяет проверять все подтипы и родительские типы класса.

1. Откройте в проекте  ``Quote_1``  файл  ``module.h`` .
2. Щелкните правой кнопкой мыши объявление класса  ``Module``  и выберите "Переход" > "Просмотреть иерархию типов".
3. Окно иерархии содержит все подтипы класса Module.
image::images/type_hierarchy.png[]


=== [[Следующие действия]] 

Учебный курс по использованию функций отладки проекта C или C++ в IDE NetBeans см. в разделе link:debugging.html[+Отладка проектов C/C+++].

link:mailto:users@cnd.netbeans.org?subject=Feedback:%20Editing%20and%20Navigating%20C/C++%20Source%20Files%20-%20NetBeans%20IDE%207.3%20Tutorial[+Отправить отзыв по этому учебному курсу+]
