Поделиться через


Предупреждение компилятора (уровень 4) C4714

функция "function", обозначенная как __forceinline, не является встроенной

Данная функция была выбрана для встроенного расширения, но компилятор не выполняет встраивание.

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

В нескорых случаях компилятор не выполняет встраивание определенных функций по механическим причинам. Например, компилятор не выполнит встраивание:

  • функции, в результате которой происходит смешение обработки исключений SEH и C++ EH.

  • некоторые функции с копиями созданных объектов, переданных по значению при включенной обработке исключений -GX/EHs/EHa.

  • функции, возвращающие по значению объекты без возможности раскрутки при включенной обработке ошибок -GX/EHs/EHa.

  • Функции со встроенной сборкой при компилировании без параметров -Og/Ox/O1/O2.

  • Функции с переменным числом аргументов.

  • Функции с оператором try (обработка исключений в C++).

В следующем примере формируется предупреждение C4714:

// C4714.cpp
// compile with: /Ob1 /GX /W4
__forceinline void func1()
{
   try
   {
   }
   catch (...)
   {
   }
}


void func2()
{
   func1();   // C4714
}

int main()
{
}