VS2010 中 error 2732: 链接规范与的早期规范冲突 的解决

在实验室做项目的时候遇到了这个问题,终于整明白了。

一般来说这个错误出现在类似以下的语句中

extern "C" int yylex(void);
extern "C" int yyparse( void );
extern "C" int yyerror(const char *fmt, ...);

我们看extern 这个关键字,是C++在调用其他语言的时候用来拓展函数的,extern "C" 就是说当我们在一个项目中出现了C、C++混编,C++文件中调用了C的函数,那么需要将这个函数拓展过来用。

但是extern "C" 也被编译器看作是函数的类型参数之一,因此extern "C" int yylex(void);和int yylex(void);如果同时在项目里出现,则会出现error2732,也就是定义冲突。

解决方案:

找到函数的声明部分和调用部分,在两处都加上如下代码:

#ifdef __cplusplus
extern "C" { #endif int yyparse( void ); //。。。各种需要的函数声明 #ifdef __cplusplus } #endif

  

编译,就可以通过啦啦啦。

重点注意函数初次声明和拓展声明两处,如果发生了声明则一定要同时含有或不含有相同的extern关键字。

OK,继续我的搭环境之路T^T

BY XHYU

原文地址:https://www.cnblogs.com/xhyu/p/3976031.html