C 未定义对'的引用;setlinebuf';
如果我尝试在Windows 10上的TDM_GCC下运行以下简单代码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(){
#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)除非将输出重定向到文件,否则code>不会真正执行任何操作。您可以将setlinebuf(stdout)
替换为setvbuf(stdout,NULL,_IOLBF,BUFSIZ)
(可能用不同的大小替换BUFSIZ
)。但是,Windows C运行时库将\u IOLBF
视为完全缓冲,与\u IOFBF
相同,因此对于交互式使用,您可能仍需要在提示输入后调用ffflush(stdout)
,或者,通过setvbuf(stdout,NULL,\u IONBF,0)将stdout
设置为无缓冲。