声明返回int的内联函数的正确方法

时间:2015-08-03 18:30:03

标签: c visual-c++ inline

以下代码

inline int read_int()
{
    return 5;
}

导致错误:expected a ';'

我试图在我的项目的单独文件中编写上面的代码,但错误仍然存​​在。这很奇怪,因为我看到有几个程序使用这样的功能。

有没有解决这个问题?可能是什么解决方案? 我也在使用Visual Studio,并为CodeChef编程,这需要速度。

1 个答案:

答案 0 :(得分:0)

显然gcc对声明为inline int()的函数非常满意。

然而,clang会因某些原因拒绝这些。如果该函数仅适用于当前文件,则将其声明为静态将解决该问题。

以下代码在gcc和clang中编译并运行:

#include <stdio.h>

static inline int read_int() {
    return 5;
}

int main() {
  int x;
  x = read_int();
  printf("int=%d\n",x);
  return 0;
}

编辑:

我找到了some documentation on clang's behaviour,它解释了这种情况。

简而言之,clang遵循C99标准,其中内联函数被视为在未优化代码时使用的另一个函数的替代版本。始终使用静态内联函数,从而避免出现问题。

另一种方法是使用优化进行编译(偶数-O1),这将导致编译器使用函数的内联版本,而不是搜索非内联版本(不存在)。 / p>