例如,如果我们有函数A,是否有可能告诉编译器你需要在代码的这一点上内联这个函数,但是那时不要这样做(调用它)。
答案 0 :(得分:4)
你不能有选择地告诉编译器内联一些调用,至少不是可移植的。
请注意,inline
只是对编译器的建议,编译器可能会或可能不会遵循内联函数体内联到调用点的建议,但某些条件如One定义规则将会放宽由编译器提供这样的函数。
答案 1 :(得分:1)
gcc
具有noinline
和always_inline
属性。
答案 2 :(得分:0)
我认为这个要求没用,问题的答案是:否。
但是,您可以通过使用宏来实现某些效果:
#define f_inline do { int i = 1 + 2; } while( 0 )
void f() {
f_inline;
}
如果您想强制f_inline;
的代码在线应用,现在可以使用f
。
答案 3 :(得分:0)
是否内联函数调用并不特别重要。见What does __inline__ mean ?。我只想编写非内联函数,让编译器决定如何以最佳方式内联它。
答案 4 :(得分:0)
如果编译器无条件地尊重您使用或不使用inline
关键字,或者您使用gcc扩展程序__attribute__((__always_inline__))
和__attribute__(__noinline__))
,那么您可以实现您想要的一个简单的包装函数:
static inline int foo_inline(int a, int b)
{
/* ... */
}
static int foo_noninline(int a, int b)
{
return foo_inline(a, b);
}
我用inline
关键字编写了它,但由于编译器通常会将其视为提示或甚至忽略它,因此您可能需要gcc属性版本。