2016-06-15 80 views
-1

我试图在C编译程序++使用switch语句内联,但我得到的警告消息功能不延伸在C++

“含有开关功能不延伸内联”

,我的程序给出了正确的输出,但是我想知道这个警告信息的含义是什么。

+1

请发布一个[最小,完整和可验证的示例](http://stackoverflow.com /帮助/ MCVE)。 –

+1

看看http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/devwin32/wrnnoinlexp_xml.html – Jarod42

回答

1

需要更多的投入来回答你的问题。 (也许你的代码片段将有助于更好地理解事物)

你是否在代码中为包含switch case的函数显式使用了inline关键字? 那么,如果你有(我想你有),那么只是想说,编译器可以忽略处理函数的请求作为内联。 编译器可能忽略内联函数的情况很少,如下所示:

  • 函数包含循环。 (for,while,do-while)
  • 函数包含静态变量。
  • 递归函数
  • 含有功能开关
  • 含有goto语句的作用。

以上是我可以暂时回忆的几个条件。

0

虽然这不是标准所要求的,但开关通常会转换为一个函数指针数组,开关参数是关键。如果该函数已内联,则需要在每个位置单独拷贝该数组,因为函数指针可能不同。由于缓存的工作方式,这是非常低效的(关于内存和速度),编译器可能会决定不内联它。 (一个聪明的架构上的聪明的编译器可能使用这个数组中的程序计数器相对地址,所以这种行为是编译器特定的。)