// 
//     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.
//

= Editing and Navigating C/C++ Source Files - NetBeans IDE Tutorial
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Editing and Navigating C/C++ Source Files - NetBeans IDE Tutorial - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Editing and Navigating C/C++ Source Files - NetBeans IDE Tutorial

_Contributed by _Ann Rice_ and maintained by _Susan Morgan_
March 2014_ [Revision number: V8.0]

The following short tutorial takes you through some of the features for navigating and editing the source files in a C or C++ project in NetBeans IDE.


== Requirements

*To follow this tutorial, you need the following software and resources.*

|===
|Software or Resource |Version Required 

|NetBeans IDE |link:https://netbeans.org/downloads/index.html[+ version 7.4 or 8.0 with NetBeans C/C++ plugin+] 

|Java Developer Kit (JDK) |link:http://java.sun.com/javase/downloads/index.jsp[+version 7 or 8+] 
|===


See the link:../../../community/releases/80/install.html[+NetBeans IDE 8.0 Installation Instructions+] and link:../../../community/releases/80/cpp-setup-instructions.html[+ Configuring the NetBeans IDE for C/C++/Fortran+]
for information about downloading and installing the required software.

*Sample Projects*

Just want to play with some projects? In the IDE, choose File > New Project, then open the Samples category and the C/C++ subcategory. The IDE provides several sample C and C++ projects to help you familiarize yourself with the IDE.


== Creating the Sample Project

The NetBeans IDE with the C/C++ plugin provides advanced editing features for modifying your source code. To explore these features, we'll use the  ``Quote``  project. If you have not already created this project, do the following:

1. Choose File > New Project.
2. In the project wizard, expand the Samples category and select the C/C++ subcategory.
3. Select the  ``Quote``  project. Click Next, then click Finish.


== Editing C and C++ Source Files


=== Setting the Formatting Style

You can use the Options window to configure default formatting style for your C and C++ projects.

1. Choose Tools > Options.
2. Click Editor in the top pane of the window.
3. Click the Formatting tab.
4. Select the C++ language from the Language drop-down list because the Quote project uses C++.
5. Select the style you want to set from the Style drop-down list.

image::images/formatting_style.png[]

[start=6]
. Modify the style properties as desired.


=== Folding Blocks of Code in C and C++ Files

For some types of files, you can use the code folding feature to collapse blocks of code so that only the first line of the block appears in the Source Editor.

1. In the  ``Quote_1``  application project, open the Source Files folder, then double-click the  ``cpu.cc``  file to open it in the Source Editor.
2. Click the collapse icon (small box with minus sign) in the left margin to fold the code of one of the methods.
3. Mouse over the  ``{...}``  symbol to the right of the folded block to display the code in the block. 

image::images/code_folding.png[]


=== Using Semantic Highlighting

You can set an option so that when you click on a class, function, variable, or macro, all occurrences of that class, function, variable, or macro in the current file are highlighted.

1. Choose Tools > Options.
2. Click Editor in the top pane of the window.
3. Click the Highlighting tab.
4. Make sure that all of the check boxes contain checkmarks.
5. Click OK.
6. In the  ``customer.cc``  file of the  ``Quote_1``  project, notice that the method names are highlighted in bold.
7. Click on an occurrence of the  ``Customer``  class.
8. All of the occurrences of the  ``Customer``  class in the file are highlighted with a yellow background. The right margin also shows markings that indicate points where an occurrence is located in the file. The markings let you see how many occurrences there are without scrolling through the file. You can click the markings to jump to the occurrences that they represent.

image::images/highlighting1.png[]

[start=9]
. To easily navigate between the occurrences, press Alt+Down to go to the next occurrence, and press Alt+Up to go to the previous occurrence.

[start=10]
. Open the  ``customer.h``  file, located in the Headers folder, and notice that class names are again highlighted in bold.

image::images/highlighting2.png[]


=== Using Code Completion and Documentation

The IDE has a dynamic C and C++ code completion feature that enables you to type one or more characters and then see a list of possible classes, methods, variables, and so on that can be used to complete the expression.

The IDE also dynamically searches for documentation for the classes, functions, methods and so on, and displays the documentation in a popup window.

1. Open the  ``quote.cc``  file in the  ``Quote_1``  project.
2. On the first blank line of the  ``quote.cc`` , type a capital C and press Ctrl-Space. The code completion box displays a short list that includes the  ``Cpu``  and  ``Customer``  classes. A documentation window also opens but displays "No documentation found" because the project source does not include documentation for its code.
3. Expand the list of items by pressing Ctrl-Space again. 

image::images/code_completion1.png[]

[start=4]
. Use your arrow keys or mouse to highlight a standard library function such as  ``calloc``  from the list, and the documentation window displays the man page for that function if the man page is accessible to the IDE. 

image::images/code-completion-documentation.png[]

[start=5]
. Select the  ``Customer``  class and press Enter.

[start=6]
. Complete the new instance of the  ``Customer``  class by typing "  ``andrew;`` ". On the next line, type the letter  ``a``  and press Ctrl-Space twice. The code completion box displays a list of choices starting with the letter  ``a`` , such as method arguments, class fields, and global names, that are accessible from the current context.

image::images/code_completion2.png[]

[start=7]
. Double-click the  ``andrew``  option to accept it and type a period after it. Press Ctrl-Space and you are provided with a list of the public methods and fields of the  ``Customer``  class.

image::images/code_completion3.png[]

[start=8]
. Delete the code you have added.


=== Adding Source Code Documentation

You can add comments to your code to automatically generate documentation for your functions, classes, and methods. The IDE recognizes comments that use Doxygen syntax and automatically generates documentation. The IDE can also automatically generate a comment block to document the function below the comment.

1. In the  ``quote.cc``  file, place your cursor on line 75, or the line above the line 
 ``int readNumberOf(const char* item, int min, int max) {`` 

[start=2]
. Type a slash and two asterisks and press Enter. The editor inserts a Doxygen-formatted comment for the  ``readNumberOf``  class. 

image::images/doxygen_comment.png[]

[start=3]
. Add some descriptive text to each of the @param lines and save the file. 

image::images/doxygen_comment_edited.png[]

[start=4]
. Click the  ``readNumberOf``  class to highlight it in yellow, and click one of the occurrences marks on the right to jump to a location where the class is used.

[start=5]
. Click the  ``readNumberOf``  class in the line you jumped to, and press Ctrl-Shift-Space to show the documentation that you just added for the parameters.

image::images/doxygen_displayed.png[]

[start=6]
. Click anywhere else in the file to close the documentation window, and click on the  ``readNumberOf``  class again.

[start=7]
. Choose Source > Show Documentation to open the documentation window for the class again.


=== Using Code Templates

The Source Editor has a set of customizable code templates for common snippets of C and C++ code. You can generate the full code snippet by typing its abbreviation and pressing the Tab key. For example, in the  ``quote.cc``  file of the  ``Quote``  project:

1. Type  ``uns``  followed by a tab and  ``uns``  expands to  ``unsigned`` .
2. Type  ``iff``  followed by a tab and  ``iff``  expands to  ``if (exp) {}`` .
3. Type  ``ife``  followed by a tab and  ``ife``  expands to  ``if (exp) {} else {}`` .
4. Type  ``fori``  followed by a tab and  ``fori``  expands to  ``for (int i = 0; i < size; i++) { Object elem = array[i];`` .

To see all the available code templates, modify the code templates, create your own code templates, or select a different key to expand the code templates:

1. Choose Tools > Options.
2. In the Options dialog box, select Editor, and click the Code Templates tab.
3. Select the appropriate language from the Language drop-down list.

image::images/code_templates.png[]


=== Using Pair Completion

When you edit your C and C++ source files, the Source Editor does "smart" matching of pair characters such as brackets, parentheses, and quotation marks. When you type one of these characters, the Source Editor automatically inserts the closing character.

1. In the  ``Quote_1``  project, place the cursor on the blank line 115 of the  ``module.cc``  file and press Return to open a new line.
2. Type  ``enum state {``  and press Return. The closing curly bracket and semi-colon are added automatically and the cursor is placed on the line between the brackets.
3. Type  ``invalid=0, success=1``  on the line between the brackets to complete the enumeration.
4. On the line after the closing  ``};``  of the enumeration, type  ``if (``  and you should see that a closing parenthesis is added automatically and the cursor is placed between the parentheses.
5. Type  ``v==null``  between the parentheses. Then type  `` {``  and newline after the right parenthesis. The closing bracket is added automatically.
6. Delete the code you have added.


=== Finding Text in Project Files

You can use the Find In Projects dialog box to search projects for instances of specified text or a regular expression.

1. Open the Find In Projects dialog box by doing one of the following:
* Choose Edit > Find In Projects.
* Right-click a project in the Projects window and choose Find.
* Press Ctrl+Shift+F.

[start=2]
. In the Find In Projects dialog box, select the Default Search tab or the Grep tab. The Grep tab uses the  ``grep``  utility, which provides a faster search, especially for remote projects. 

image::images/find_in_projects.png[]

[start=3]
. In the Grep tab, type the text or regular expression for which you want to search, specify the search scope and file name pattern, and select the check box Open in New Tab so you can save multiple searches in separate tabs.

[start=4]
. Click Find.
The Search Results tab lists the files in which the text or regular expression is found.

Buttons in the left margin enable you to change your view of the search results.

image::images/find_in_projects2.png[]

[start=5]
. Click the Expand/Collapse button to collapse the list of files so only the filenames are shown. Click the other buttons to show the search results as a directory tree or as a list of files. These options are useful when you perform a search across multiple projects.

[start=6]
. Double-click one of the items in the list and the IDE takes you to the corresponding location in the source editor.


== Navigating C and C++ Source Files

The NetBeans IDE with the C/C++ plugin provides advanced navigation features for viewing your source code. To explore these features, continue using the  ``Quote_1``  project.


=== Using the Classes Window

The Classes window lets you see all of the classes in your project, and the members and fields for each class.

1. Click the Classes tab to display the Classes window. If the Classes tab is not displayed, choose Window > Classes
2. Expand the  ``Quote_1``  node in the Classes window. All classes in the project are listed.
3. Expand the  ``Customer``  class. 

image::images/classes_window.png[]

[start=4]
. Double-click the  ``name``  variable to open the  ``customer.h``  header file.


=== Using the Navigator Window

The Navigator window provides a compact view of the file that is currently selected, and simplifies navigation between different parts of the file. If the Navigator window is not displayed, choose Window > Navigating > Navigator to open it.

1. Click anywhere in the  ``quote.cc``  file in the Editor window.
2. A compact view of the file is displayed in the Navigator window.

image::images/navigator_window.png[]

[start=3]
. To navigate to an element of the file, double-click the element in the Navigator window and the cursor in the Editor window moves to that element.

[start=4]
. Right-click in the Navigator to choose a different way to sort the elements, or group the items, or filter them.

To find out what the icons in the Navigator represent, open the IDE online help by choosing Help > Help Contents, and search for "navigator icons" in the help window.


=== Finding Class, Method, and Field Usages

You can use the Usages window to show you everywhere a class (structure), function, variable, macro, or file is used in your project's source code.

1. In the  ``customer.cc``  file, right-click the  ``Customer``  class on line 42, and choose Find Usages.
2. In the Find Usages dialog box, click Find.
3. The Usages window opens and displays all of the usages of the  ``Customer``  class in the source files of the project.

image::images/usages_window.png[]

[start=4]
. Click the arrow buttons in the left margin to step through the occurrences and show them in the Editor, or change between logical and physical view. You can also filter the information using a second column of buttons in the left margin.


=== Using the Call Graph

The Call Graph window displays two views of the calling relationships between functions in the project. A tree view shows the functions called from a selected function, or the functions that call the selected function. A graphical view shows the calling relationships using arrows between the called and calling functions.

1. In the  ``quote.cc``  file, right-click on the  ``main``  function and choose Show Call Graph.
2. The Call Graph window opens and displays a tree and graphical view of all functions called from the  ``main``  function.

image::images/call_graph1.png[]

If you do not see all the functions as shown here, click the third button on the left side of the Call Graph window to show "who is called from this function."


[start=3]
. Expand the  ``endl``  node to display the functions called by that function. Notice the graph is updated to show the functions called by  ``endl``  as well.

[start=4]
. Click the second button, called Bring Into Focus, on the left side of the window to focus on the  ``endl``  function, then click the fourth button Who Calls this Function to view all the functions that call the  ``endl``  function. 

image::images/call_graph2.png[]

[start=5]
. Expand some of the nodes in the tree to see more functions.

image::images/call_graph3.png[]


=== Using Hyperlinks

Hyperlink navigation lets you jump from the invocation of a class, method, variable, or constant to its declaration, and from its declaration to its definition. Hyperlinks also let you jump from a method that is overridden to the method that overrides it, and vice versa.

1. In the  ``cpu.cc``  file of the  ``Quote_1``  project, mouse over line 37 while pressing Ctrl. The  ``ComputeSupportMetric`` function is highlighted and an annotation displays information about the function.

image::images/hyperlinks1.png[]

[start=2]
. Click the hyperlink and the editor jumps to the definition of the function.

image::images/hyperlinks2.png[]

[start=3]
. Mouse over the definition while pressing Ctrl, and click the hyperlink. The editor jumps to the declaration of the function in the  ``cpu.h``  header file.

image::images/hyperlinks3.png[]

[start=4]
. Click the left arrow in the editor toolbar (second button from the left) and the editor jumps back to the definition in  ``cpu.cc`` .

[start=5]
. Hover the mouse cursor over the green circle in the left margin and see the annotation that indicates that this method overrides another method.

image::images/overide_annotation.png[]

[start=6]
. Click the green circle to go to the overridden method and you jump to the  ``module.h``  header file, which shows a gray circle in the margin to indicate the method is overridden.

[start=7]
. Click the gray circle and the editor displays a list of methods that override this method.

image::images/overridden_by_list.png[]

[start=8]
. Click the  ``Cpu::ComputeSupportMetric``  item and you jump back to the declaration of the method in the  ``cpu.h``  header file.


=== Using the Includes Hierarchy

The Includes Hierarchy window lets you inspect all header and source files that are directly or indirectly included in a source file, or all source and header files that directly or indirectly include a header file.

1. In the  ``Quote_1``  project, open the  ``module.cc``  file in the Source Editor.
2. Right-click on the  ``#include "module.h"``  line in the file and choose Navigate > View Includes Hierarchy.
3. By default, the Hierarchy window displays a plain list of files that directly include the header file. Click the right-most button at the bottom of the window to change the display to a tree view. Click the second button from the right to change the display to all files that include or are included. Expand the nodes in the tree view to see all of the source files that include the header file.

image::images/includes_hierarchy.png[]


=== Using the Type Hierarchy

The Type Hierarchy window lets you inspect all subtypes or supertypes of a class.

1. In the  ``Quote_1``  project, open the  ``module.h``  file.
2. Right-click on the declaration of the  ``Module``  class and choose Navigate > View Type Hierarchy.
3. The Hierarchy window displays all of the subtypes of the Module class.

image::images/type_hierarchy.png[]


=== [[Next Steps]] 

See link:debugging.html[+Debugging C/C++ Projects+] for a tutorial on using some of the features for debugging a C or C++ project in NetBeans IDE.

link:mailto:users@cnd.netbeans.org?subject=Feedback:%20Editing%20and%20Navigating%20C/C++%20Source%20Files%20-%20NetBeans%20IDE%207.3%20Tutorial[+Send Feedback on This Tutorial+]
