编译器警告(等级 1)C4750

“identifier”:函数 with _alloca() 内嵌到循环中

备注

“identifier”函数在循环内强制进行 _alloca 函数的内联扩展,这在执行此循环时会引起堆栈溢出

更正此错误

  1. 确保未使用 __forceinline 说明符修改“identifier”函数

  2. 确保“identifier”函数未包含循环中所包含的 _alloca 函数

  3. 请勿指定 /O1/O2/Ox/Og 编译开关。

  4. 在将会捕获堆栈溢出的 try-except 语句中放置 _alloca 函数。

示例

下面的代码示例在循环中调用 MyFunction ,并且 MyFunction 调用 _alloca 函数。 __forceinline 修饰符导致 _alloca 函数内联扩展。

// c4750.cpp
// compile with: /O2 /W1 /c
#include <intrin.h>

char * volatile newstr;

__forceinline void myFunction(void) // C4750 warning
{
// The _alloca function does not require a __try/__except
// block because the example uses compiler option /c.
    newstr = (char * volatile) _alloca(1000);
}

int main(void)
{
    for (int i=0; i<50000; i++)
       myFunction();
    return 0;
}

另请参阅

_alloca