关于 printf 的缓冲区

最近在写程序的时候遇到了一个问题:最开始,为了重定向stdout流,我重写了_write函数,将其重定向至串口:

1
2
3
4
5
6
7
8
9
10
11
/* 该重定向方法适用于 GCC 编译器,如果用的是 ARMCC 编译器请自行查找资料 */
int _write(int fd, char *ptr, int len) {
for (int i = 0; i < len; i++) {
if (*(ptr + i) == '\n') {
HAL_UART_Transmit(&huart1, (uint8_t *)&"\r", 1, 1);
}
HAL_UART_Transmit(&huart1, (uint8_t *)ptr + i, 1, 1);
}

return len;
}

之后调用printf("OK");输出。程序运行后并没有任何输出,调试发现_write函数并没有被执行。

如何在Windows下愉快地用VS Code写C/C++

Visual Studio Code(下面简称VS Code)是由Microsoft开发的一款开源代码编辑器,凭借其出色的性能、高度的可定制性和简洁的UI获得了大量程序员的喜爱,在安装对应的插件后,即可成为多种语言的IDE。但VS Code本身只是一个编辑器,并不包含编译器,所以这篇文章,我就来介绍一下如何配置VS Code,让你在Windows下愉快地写C/C++程序。