MSVC 6.0 的 inline, _inline, __inline

版权声明:本文为博主原创文章,未经博主允许不得转载。 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 了。

猜你喜欢

转载自blog.csdn.net/XinYaping/article/details/51993893