当我使用 编译一个 cpp 程序g++ -Winline xx.cpp
时,我没有收到关于不正确的内联声明的警告。我的代码是
#include <iostream>
inline int test(int n)
{
int res=0;
for(int i=0;i<n;++i)
res+=i;
return res;
}
int main()
{
int n=100;
int mul=test(n);
std::cout<<mul<<std::endl;
return 0;
}
main的汇编代码为:
(gdb) disassemble main
Dump of assembler code for function main():
0x080485f4 <+0>: push %ebp
0x080485f5 <+1>: mov %esp,%ebp
0x080485f7 <+3>: and $0xfffffff0,%esp
0x080485fa <+6>: sub $0x20,%esp
0x080485fd <+9>: movl $0x64,0x18(%esp)
0x08048605 <+17>: mov 0x18(%esp),%eax
0x08048609 <+21>: mov %eax,(%esp)
0x0804860c <+24>: call 0x804869c <test(int)>
0x08048611 <+29>: mov %eax,0x1c(%esp)
0x08048615 <+33>: mov 0x1c(%esp),%eax
0x08048619 <+37>: mov %eax,0x4(%esp)
0x0804861d <+41>: movl $0x804a040,(%esp)
0x08048624 <+48>: call 0x80484c0 <_ZNSolsEi@plt>
0x08048629 <+53>: movl $0x8048530,0x4(%esp)
0x08048631 <+61>: mov %eax,(%esp)
0x08048634 <+64>: call 0x8048520 <_ZNSolsEPFRSoS_E@plt>
0x08048639 <+69>: mov $0x0,%eax
0x0804863e <+74>: leave
0x0804863f <+75>: ret
End of assembler dump.
很明显 test 没有内联,但我想知道为什么没有关于它的警告。