版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/XinYaping/article/details/51993893
有一个在 Visual C++ 2015 下写的纯 C 的程序,换到 MSVC 6.0 下编译,然后在这一个内联函数上出了错:
inline int next_p2 (int a)
{
int rval = 1;
while (rval < a) rval <<= 1;
return rval;
}
出错信息:
…\glt.c(54) : error C2054: expected ‘(’ to follow ‘inline’
…\glt.c(55) : error C2085: ‘next_p2’ : not in formal parameter list
…\glt.c(55) : error C2143: syntax error : missing ‘;’ before ‘{’
…\glt.c(87) : warning C4013: ‘next_p2’ undefined; assuming extern returning int
反正这个报错信息就是胡说八道。真实的原因是,VC++ 6.0 在编译C 程序(注意不是 C++)的时候,它并不认识 inline 这个关键字。
把 inline 这个关键字去掉就编译通过了:
但是,仅仅去掉 inline 关键字,看上去不是一个合理的解决方案。总不能在 C 程序一概不用内联函数吧。
然后发现,如果把 inline 改成 _inline,就编译通过了。
那么 __inline 行不行呢?试一下,也行。___inline 本是 gcc 的一个私家扩展,但是 MSVC 6.0 也支持了。
总之唯独就是 inline 不支持。
经查,inline 是 C99 开始才引入到 C 语言当中的关键字。而 MSVC 6.0 是 1998 年的产物,所以当然不支持 inline 了。