是否可以仅使用某些调用内联函数

时间:2012-09-19 15:15:55

标签: c compiler-construction inline

例如,如果我们有函数A,是否有可能告诉编译器你需要在代码的这一点上内联这个函数,但是那时不要这样做(调用它)。

5 个答案:

答案 0 :(得分:4)

你不能有选择地告诉编译器内联一些调用,至少不是可移植的。

请注意,inline只是对编译器的建议,编译器可能会或可能不会遵循内联函数体内联到调用点的建议,但某些条件如One定义规则将会放宽由编译器提供这样的函数。

答案 1 :(得分:1)

gcc具有noinlinealways_inline属性。

http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html

答案 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属性版本。

相关问题