汪自强

导航

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

目标板是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语言的编译和连接方式一致的所有语言)

 

posted on 2017-01-10 11:29  汪自强  阅读(1642)  评论(0编辑  收藏  举报