zjtzlqr 发表于 2013-2-28 19:01:48

为什么HardwareSetup函数需要用extern c来修饰

本帖最后由 zjtzlqr 于 2013-2-28 19:02 编辑

#ifdef __cplusplus
extern "C"
{
#endif
extern void HardwareSetup(void);
#ifdef __cplusplus
}
#endifHardwareSetup函数的主要内容是一些mcu外设的配置
MSTCR1.BIT.MSTDTC = 1;
MSTCR1.BIT.MSTAD1 = 1;
MSTCR1.BIT.MSTDA = 1;
MSTCR2.BIT.MSTICSU = 0;
MSTCR2.BIT.MSTSCI3_1 = 0;
MSTCR2.BIT.MSTSCI3_2 = 0;
MSTCR2.BIT.MSTSCI3_3 = 0;
renesas系列单片机中为什么HardwareSetup函数需要用extern c来修饰extern void HardwareSetup(void);

难道这个配置硬件用的函数不是用c语言编译的而是用c++来编译的

cnxh 发表于 2013-2-28 19:20:41

c++来编译c,就要02.extern "C"

zjtzlqr 发表于 2013-3-1 09:09:02

cnxh 发表于 2013-2-28 19:20 static/image/common/back.gif
c++来编译c,就要02.extern "C"

问题是瑞萨的这个编译器是c++的编译器吗?

zjtzlqr 发表于 2013-3-2 00:15:42

有没有知道这方面知识的人

histamine 发表于 2013-3-2 17:45:17

C++支持重载,为了区别各个重载函数,其编译器函数名修饰约定规则和C语言编译器有点不一样

使用extern "C"就是叫C++编译器对某个函数或者某几个函数使用C编译器函数名修饰约定规则
从而避免同一个函数在C编译器编译出来的object文件和C++编译器编译出来的object文件中函数符号名称不一样,导致链接失败

i55x 发表于 2013-3-2 18:46:25

瑞萨高端的单片机都是用gcc的,当然支持c++了。
页: [1]
查看完整版本: 为什么HardwareSetup函数需要用extern c来修饰