realview MDK C/C++ 混合编程问题

前几天搞一个项目涉及到C/C++混合编程,在Keil下编译时提示:

error: #800:this declaration may not have extern "C" linkage

error: At end of source : #67:expected a "}"

当时立马想到是C和C++编程时需要extern "C",马上试了试,然后宣告失败。

因为双击后提示出错的地方是template<clase T>,以为是keil不支持类模板造成的,于是查阅相关文档,一切的查阅结果证实keil是完全支持c++的,并且不需要太多的设置。

最后找出问题的元凶是靠一步步实验,建立新工程,测试是哪个文件的问题,最后将矛头直接指向"ch375fsbyte.h"头文件,然后又指向了"CH375HFM.H"这个头文件,最后发现是这个问题:

在CH375HFM前面有这样一段定义

#ifdef __cplusplus
extern "C" {
#endif

而在后面有这样一段定义

#ifdef __cplusplu
}
#endif

仔细的人估计已经看出来了。

 

前面条件编译是如果用到C++,则定义{,而后面条件编译是想说明如果用到C++,就定义},问题在哪里呢?就在后面那个条件编译的条件是cplusplu,而不是cplusplus这个。所有前面定义了{,而后面没有定义}。

 

自己这次的认识:

1:Keil是很完整的支持C++的

2:如果一个文件里面的{}不配套是有可能的,例如下面:

#define END_GLUMSG_MAP2() /
   if(bHandle) /
    return 0; /
   return 1; /
  }

意思是}为宏定义的一部分。/表示续行符。Keil也是支持的,但是还是会以红色标记它。

3:如果编译时提示错误,双击错误时,提示的地方不一定是案情的第一现场,也许真正的错误是在另一个地方。最有可能就是在包含的头文件里面,这已经不是我第一次遇到了.

你可能感兴趣的:(编程,c,测试,文档)