ReSharper 2019.2 Help

Code Inspection and Quick-Fixes in C++

The key features of ReSharper's code analysis are also supported in C++. You can find the detailed information on these features in the corresponding topics of the Code Analysis section. In the main topic of the section, you can also find the feature matrix and check what exactly is supported in C++.

In this topic, you can find some examples of using code analysis features in C++.

By default, code inspection, quick-fixes, and context actions are available in all solution files. If necessary, you can enable these features in external files referenced from solution with the Enable inspections, quick fixes and context actions in files external to the solution checkbox on the Code Editing | C++ | Inspections page of ReSharper options (Alt+R,,O).

Code Inspection

ReSharper's static code analysis detects most of compiler errors and some compiler warnings in C++ files.

Besides, it finds other code issues, which otherwise would be found in runtime. For example, using a virtual method in constructor leads to unexpected behavior as mentioned in this StackOverflow question. ReSharper points at this problem before you even compile:

ReSharper warning. virtual method in constructor

The analysis is performed by applying code inspections to the current document or in any specified scope.

Code inspection results in a C++ project

To find out what kind of code inspections ReSharper provides, check out the full list of ReSharper C++ code inspections.

To learn how to customize code inspection, see Configure Code Inspection Settings.

Quick-fixes

Quick-fixes let you automatically resolve most of code issues found with code inspection. If one or more quick-fixes are available for a code issue, you will see the corresponding action indicator when your caret is on the highlighted code. Press Alt+Enter to see and apply the desired fix.

ReSharper provides over 50 quick-fixes for C++. Here are some examples:

Create from usage

If you use an undeclared symbol, ReSharper suggests one or more quick-fixes for creating the symbol based on the usage:

Generating C++ field from usage

Create declaration

If a member function in a C++ file does not have declaration in the header file, ReSharper helps you create the missing declaration according to the signature of the implementation:

Generating declaration for C++ class member

Add missing #include directive

If you use a symbol that is defined in the standard libraries or elsewhere in your solution, ReSharper helps you add the missing #include directives automatically:

ReSharper: helps adding missing C++ includes automatically

You can use the Show popups for import actions checkbox on the Code Editing | C++ | Inspections page of ReSharper options (Alt+R,,O) to disable the popup. If the checkbox is not selected, the corresponding action will be available in the action list on Alt+Enter.

Add forward declaration

ReSharper can also generate a forward declaration for an unresolved symbol:

ReSharper: Add forward declaration quick-fix

Remove unused #include directives

All unused #include are highlighted and can be easily removed with a quick-fix:

Removing unused #include directives

Initialize variable

ReSharper detects uninitialized variables and helps initializing them with the default value:

ReSharper helps initialize variables in C++

Replace the dot (.) with arrow (->) and vice versa

If the dot . operator is erroneously applied to a pointer, ReSharper helps you replace it with the arrow -> operator:

ReSharper helps replacing the dot operator with arrow

The reverse quick-fix is also available:

ReSharper helps replacing the arrow operator with the dot

Change variable type

If the specified type of a variable or a field does not match to the assigned value, ReSharper provides a quick-fix to use the correct type in the declaration:

ReSharper helps fixing types of variables and fields

Change return type

If a function return type does not match the value it actually returns, ReSharper lets you quickly fix the return type:

ReSharper helps fixing types of variables and fields

Initialize members

If ReSharper detects uninitialized type members, it suggests initializing all members in one fix. You can also use the sub-menu of this fix to generate initializations for specific members.

ReSharper C++: quick-fix to initialize members

Making ReSharper ignore specific code

ReSharper allows you to ignore specific files, folders and file masks in different ways. You can configure ignored files on the following options pages:

  • Code Inspection | Settings to exclude files, folders, and masks from code inspection.

  • Code Inspection | Generated Code to partly disable code inspection for generated code.

  • Environment | Search & Navigation to specify files and folders that should be ignored by Search by Name commands.

  • Code Editing | Third-Party Code to add C++, JavaScript, TypeScript, CSS, HTML and JSON files, folders and wildcards to be treated either as 'skipped' or 'library'. ReSharper will completely ignore 'skipped' files, and treat 'library' files as read-only — indexed for navigation, but no inspections, quick-fixes and refactorings.

Last modified: 13 November 2019