[C Warning] Unit1.h(21): W8027 Functions containing switch are not e
xpanded inline
奇怪的是,尽管有这个 Warning, 但是程序还是可以正常运行,那么它是什么意
思呢?有什么用?怎样除掉他呢?
谢谢
5 个解决方案
#1
好像要一个编译器设置有关,
好像是Link->Debug里面的一项.
这个警告最好还是注意一下.
因为有代码没执行,达不到预期的效果.
好像是Link->Debug里面的一项.
这个警告最好还是注意一下.
因为有代码没执行,达不到预期的效果.
#2
原因是:由于某个函数中写有Switch语句,而这个函数又被申明为内联(inline)函数(也就是函数名前加了inline关键字),内联函数要求函数体短小精悍,最好不要超过3个可执行行,这样内联函数执行的效率较高,内联函数不允许在函数体内出现switch分支语句,由于那个函数体定义了switch语句,并且又被声明为内联,因此编译器在编译那个函数时不把哪个函数当作内联函数来看待只是当成一般函数,并发出上面的警告!所以也不影响程序执行!
解决办法很简单,把inline关键字去掉即可!
解决办法很简单,把inline关键字去掉即可!
#3
谢谢上面二位的解答。
的确我用了switch语句,但是我用的是下面这个函数,而不是内联函数。
void __fastcall TForm1::OnHotKey(TMessage & Msg);
所以才有这个疑问(因为 Warning 里面说是什么什么inline)
的确我用了switch语句,但是我用的是下面这个函数,而不是内联函数。
void __fastcall TForm1::OnHotKey(TMessage & Msg);
所以才有这个疑问(因为 Warning 里面说是什么什么inline)
#4
能否把你的unit1.h内容列出来,让我看一看呢?
#5
看来你的OnHotKey(TMessage & Msg)是用在消息映射,我也遇到过同样的问题,如果你实在看不惯这个warning, 解决方式是重载WndProc
#1
好像要一个编译器设置有关,
好像是Link->Debug里面的一项.
这个警告最好还是注意一下.
因为有代码没执行,达不到预期的效果.
好像是Link->Debug里面的一项.
这个警告最好还是注意一下.
因为有代码没执行,达不到预期的效果.
#2
原因是:由于某个函数中写有Switch语句,而这个函数又被申明为内联(inline)函数(也就是函数名前加了inline关键字),内联函数要求函数体短小精悍,最好不要超过3个可执行行,这样内联函数执行的效率较高,内联函数不允许在函数体内出现switch分支语句,由于那个函数体定义了switch语句,并且又被声明为内联,因此编译器在编译那个函数时不把哪个函数当作内联函数来看待只是当成一般函数,并发出上面的警告!所以也不影响程序执行!
解决办法很简单,把inline关键字去掉即可!
解决办法很简单,把inline关键字去掉即可!
#3
谢谢上面二位的解答。
的确我用了switch语句,但是我用的是下面这个函数,而不是内联函数。
void __fastcall TForm1::OnHotKey(TMessage & Msg);
所以才有这个疑问(因为 Warning 里面说是什么什么inline)
的确我用了switch语句,但是我用的是下面这个函数,而不是内联函数。
void __fastcall TForm1::OnHotKey(TMessage & Msg);
所以才有这个疑问(因为 Warning 里面说是什么什么inline)
#4
能否把你的unit1.h内容列出来,让我看一看呢?
#5
看来你的OnHotKey(TMessage & Msg)是用在消息映射,我也遇到过同样的问题,如果你实在看不惯这个warning, 解决方式是重载WndProc