C 未定义对'的引用;setlinebuf';

C 未定义对'的引用;setlinebuf';,c,printf,buffer,scanf,C,Printf,Buffer,Scanf,如果我尝试在Windows 10上的TDM_GCC下运行以下简单代码 #include<stdio.h> int main(){ double input; setlinebuf(stdout); printf("Enter Your Input -"); scanf("%If", &input); printf("Entered name is %f", input); return 0; } #包括 int main(){

如果我尝试在Windows 10上的TDM_GCC下运行以下简单代码

#include<stdio.h>

 int main(){

  double input;

   setlinebuf(stdout);

    printf("Enter Your Input -");
    scanf("%If", &input);
    printf("Entered name is %f", input);

 return 0;
}
#包括
int main(){
双输入;
setlinebuf(标准输出);
printf(“输入您的输入-”);
scanf(“%If”,&input);
printf(“输入的名称为%f”,输入);
返回0;
}
它(通过gcc)编译时出现一个错误,该错误表示-未定义对“setlinebuf”的引用。我正在使用setlinebuf使缓冲区仅缓冲行明智

是一个非标准函数,需要

功能宏打开一些传统上在Unix等环境中使用,但尚未达到C标准的功能集

在代码文件顶部添加以下行(包括
stdio.h
)以打开
setlinebuf
的声明:

#define _BSD_SOURCE 

请注意,可选功能的存在不是强制性的,因此在您的平台上可能不可用。

在包含行“define”\u BSD\u SOURCE before“include”之后,我在编译后收到相同的错误消息-未定义对“setlinebuf”的引用是可能的(甚至可能的)BSD功能在Windows中根本不可用。毕竟,微软为什么要在他们的libc版本中添加对旧BSD特性的支持?这与我正在使用的Eclipse终端模拟器有什么关系吗?我使用的是EclipseNeon。不,它取决于libc。Windows在其libc中显然没有任何
setlinebuf
的实现。默认情况下,终端是行缓冲的,因此
setlinebuf(stdout)不会真正执行任何操作。您可以将
setlinebuf(stdout)
替换为
setvbuf(stdout,NULL,_IOLBF,BUFSIZ)
(可能用不同的大小替换
BUFSIZ
)。但是,Windows C运行时库将
\u IOLBF
视为完全缓冲,与
\u IOFBF
相同,因此对于交互式使用,您可能仍需要在提示输入后调用
ffflush(stdout)
,或者,通过
setvbuf(stdout,NULL,\u IONBF,0)将
stdout
设置为无缓冲。