2012-09-19 42 views

回答

4

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

请注意,inline只是对编译器的一个建议,编译器可能会也可能不会遵从将内联函数的主体内联到调用点的建议,但编译器会放宽像One定义规则这样的一些条件对于这样的功能。

0

我觉得要求不是非常有用,并且回答你的问题是:第

但是,您可以通过使用宏实现类似的意思:

#define f_inline do { int i = 1 + 2; } while(0) 

void f() { 
    f_inline; 
} 

您现在可以如果您想要强制f的代码在线应用,请使用f_inline;

0

这并不特别重要内联函数是否你调用的。见What does __inline__ mean ?。我只需编写非内联函数,并让编译器决定如何以最佳方式内联它。

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

相关问题