Geo*_*rge 17 c++ inline tdm-mingw
我一直在用C++测试内联函数调用.
Thread model: win32
gcc version 4.3.3 (4.3.3-tdm-1 mingw32)
Run Code Online (Sandbox Code Playgroud)
C++编程语言中的Stroustrup:
内联说明符是编译器的一个提示,它应该尝试生成代码内联,而不是为函数设置一次代码,然后通过通常的函数调用机制调用.
但是,我发现生成的代码根本不是内联的.有一个CALL为instrction 国际广场的功能.
替代文字http://i42.tinypic.com/8ys3f4.jpg
为什么会这样?那我怎么能使用内联函数呢?
编辑:使用的命令行选项:
**** Build of configuration Debug for project InlineCpp ****
**** Internal Builder is used for build ****
g++ -O0 -g3 -Wall -c -fmessage-length=0 -osrc\InlineCpp.o ..\src\InlineCpp.cpp
g++ -oInlineCpp.exe src\InlineCpp.o
Run Code Online (Sandbox Code Playgroud)
njs*_*jsf 48
就像Michael Kohne所提到的那样,inline关键字总是一个提示,并且在你的函数的情况下GCC决定不内联它.
由于您使用的是Gcc,因此可以强制使用__attribute((always_inline))进行内联.
例:
/* Prototype. */
inline void foo (const char) __attribute__((always_inline));
Run Code Online (Sandbox Code Playgroud)
资料来源:GCC内联文档
Mic*_*hne 23
没有通用的C++方法来强制编译器创建内联函数.请注意您引用的文本中的"提示"一词 - 编译器没有义务听取您的意见.
如果你真的,绝对必须要做一些内联,你需要一个编译器特定的关键字,或者你需要使用宏而不是函数.
编辑:njsf在他的回复中给出了正确的gcc关键字.
您是否正在查看调试版本(禁用优化)?编译器通常会在"调试"版本中禁用内联,因为它们会使调试更加困难.
在任何情况下,inline
指定的确是一个提示.编译器不需要内联函数.任何编译器可能决定忽略内联提示的原因有很多:
归档时间: |
|
查看次数: |
9490 次 |
最近记录: |