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