是GCC错误吗?

Car*_*s00 4 c c++ linux gcc g++

在编译我的项目混合时C,C++我得到了这个错误(这在编译C++文件时):

/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
In function ‘int std::__convert_from_v(__locale_struct* const&, char*, int, const char*, ...)’:
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:70:3:
sorry, unimplemented:
function ‘int std::__convert_from_v(__locale_struct* const&, char*, int, const char*, ...)’
can never be inlined because it uses variable argument lists
Run Code Online (Sandbox Code Playgroud)

编译结束.

但是,当我手动编辑的文件 /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h ,并删除inline修改之前,__convert_from_vWORKS.

导致问题的函数头是inline最初的:

inline int
__convert_from_v(const __c_locale& __cloc __attribute__ ((__unused__)),
                   char* __out,
                   const int __size __attribute__ ((__unused__)),
                   const char* __fmt, ...)
Run Code Online (Sandbox Code Playgroud)

我想这样的功能不应该被标记为inline.是错误还是我做错了什么?[gcc 4.6.1,Ubuntu 11.10]

vit*_*aut 7

这可能是由于优化设置或重新定义inline__convert_from_v内联力.这是一个重现错误的小型人工示例:

#define inline __always_inline
#include <bits/c++locale.h>

int main () {
  __locale_t loc;
  return std::__convert_from_v(loc, 0, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)

在Ubuntu 11.10上使用g ++ 4.6.1进行编译会出错:

/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h: In function ‘int std::__convert_from_v(__locale_struct* const&, char*, int, const char*, ...)’:
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:70:3: sorry, unimplemented: function ‘int std::__convert_from_v(__locale_struct* const&, char*, int, const char*, ...)’ can never be inlined because it uses variable argument lists
Run Code Online (Sandbox Code Playgroud)

因此,请检查您的代码以重新定义inline或尝试不同的优化设置.

我认为这个函数被标记为的原因inline是因为它是在标题中定义的.如果没有inline你在每个包含(通常是间接)标题的翻译单元中定义它.