我正在编译下一个简单的例子:
#include <iostream>
struct PP
{
inline void wInline();
}
inline void PP::wInline()
{
std::cout << "hola" << endl;
}
int main()
{
PP pp;
pp.wInline();
return 0;
}
以这种方式:
g++ -O0 -finline-functions -finline-functions-called-once
-finline-small-functions -Wall -Wextra -pedantic -std=c++11 -Winline
main.cpp
使用gcc 4.8.2并且没有内联wInline。
是-finline-functions,-finline-functions-called-once和 -finline-small-functions标志足够了? 为什么即使启用-Winline标志也没有警告?
答案 0 :(得分:1)
inline
关键字是优化程序的提示。由于您使用-O0
进行编译,因此无法进行优化。
gcc documentation说明-Winline
:
如果无法内联声明为内联的函数,则发出警告。
有哪些函数可以声明inline
的规则以及gcc用来决定是否应该内联声明为内联的函数的启发式。
您可以详细了解inline
关键字here。
(编辑回答第二个问题。)