blob: 556032a211fd136c4493b03e350322c41e0d4dbb [file] [log] [blame]
//
// 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[+Отправить отзыв по этому учебному курсу+]