# finstrument-functions, Qinstrument-functions

Determines whether function entry and exit points are instrumented.

## Syntax

Linux: | -finstrument-functions -fno-instrument-functions

macOS: | -finstrument-functions -fno-instrument-functions

Windows: | /Qinstrument-functions /Qinstrument-functions-

## Arguments

None

## Default

-fno-instrument-functions or /Qinstrument-functions- | Function entry and exit points are not instrumented.

## Description

This option determines whether function entry and exit points are instrumented. It may increase execution time.

The following profiling functions are called with the address of the current function and the address of where the function was called (its "call site"):

- This function is called upon function entry:

  -     void __cyg_profile_func_enter (void *this_fn,

        void *call_site);

- This function is called upon function exit:

  -     void __cyg_profile_func_exit (void *this_fn,

        void *call_site);

These functions can be used to gather more information, such as profiling information or timing information. Note that it is the user's responsibility to provide these profiling functions.

If you specify -finstrument-functions (Linux* and macOS) or /Qinstrument-functions (Windows*), function inlining is disabled. If you specify -fno-instrument-functions or /Qinstrument-functions-, inlining is not disabled.

On Linux and macOS systems, you can use the following attribute to stop an individual function from being instrumented:

    __attribute__((__no_instrument_function__))

It also stops inlining from being disabled for that individual function.

This option is provided for compatibility with gcc.

## IDE Equivalent

None

## Alternate Options

None

Parent topic: Profile Guided Optimization Options