以下代码
inline int read_int()
{
return 5;
}
导致错误:expected a ';'
我试图在我的项目的单独文件中编写上面的代码,但错误仍然存在。这很奇怪,因为我看到有几个程序使用这样的功能。
有没有解决这个问题?可能是什么解决方案? 我也在使用Visual Studio,并为CodeChef编程,这需要速度。
答案 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>