【发布时间】:2016-11-09 21:09:13
【问题描述】:
Clang/LLVM 和 GCC 都显示此警告。我知道必须包含标题才能使用许多功能,但 stdio.h 包含在文件顶部。我从同一个标头中使用了其他功能(例如setbuf()),这些功能都很好。正如预期的那样,删除头包含会导致为这些其他函数抛出错误和警告。
我使用clang -MD -MF 显示包含的头文件并检查了/usr/include/stdio.h,其中包含setlinebuf() 的原型。我在网上找到了一个对 unix.h 的引用,但这似乎在我的系统上不存在。
我正在使用 Lubuntu 16.10 x86_64,Clang 3.8.1。
View source: 第 1 行包含,第 32 行函数使用。
【问题讨论】:
-
您需要为该功能使用适当的功能测试宏。见
man setlinebuf -
...which is 在任何包含之前添加
#define _BSD_SOURCE,告诉库头文件您想要BSD 功能(其中setlinebuf()是其中之一)。 -
建议阅读
setlinebuf()的手册页,其中包含以下语句:Feature Test Macro Requirements for glibc (see feature_test_macros(7)): setbuffer(), setlinebuf(): _BSD_SOURCE