首页 > 编程语言 > 详细

Keil中C++的printf重定向问题

时间:2017-01-10 13:12:27      阅读:3896      评论:0      收藏:0      [点我收藏+]

目标板是STM32F103,由于项目需要使用C++在Keil中编写程序,于是

技术分享

 

 此时printf函数重定向

int fputc(int ch, FILE *f)
  {
        USART1->DR=(uint8_t)ch;
        while((USART1->SR&0X40)==0);//等待发送结束
    return ch;
  }

会报错:../../../Src/main.c(90): error:  #734: function "fputc(int, std::FILE *)" conflicts with using-declaration of function "std::fputc(int, std::FILE *) C"

参考了http://www.openedv.com/posts/list/49341.htm,

我直接在重定向上加了extern c

extern "C" 
{    
    int fputc(int ch, FILE *f)
  {
        USART1->DR=(uint8_t)ch;
        while((USART1->SR&0X40)==0);//
    return ch;
  }
}

这样编译就通过了,printf函数也可以使用。

extern "C"的真实目的是实现类C和C++的混合编程。在C++源文件中的语句前面加上extern "C",表明它按照类C的编译和连接规约来编译和连接,而不是C++的编译的连接规约。这样在类C的代码中就可以调用C++的函数or变量等。(注:我在这里所说的类C,代表的是跟C语言的编译和连接方式一致的所有语言)

 

Keil中C++的printf重定向问题

原文:http://www.cnblogs.com/JohnnyWang/p/6268728.html

(0)
(2)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!