为什么它会发出隐式声明的警告?
我正在使用 usleep(),显然是在 <unistd.h> 文件中声明的。但是在编译时,它给我 implicit-declaration 警告。为什么?
例如:
#include <stdio.h>
#include <unistd.h>
int main() {
for(int i = 0; i <= 10; i++) {
printf("\r%d", i);
fflush(stdout);
usleep(500000); // 0.5 seconds
}
printf("\n");
return 0;
}
解决方案
这是正常现象,您需要把 -D_DEFAULT_SOURCE 添加到命令行中。
因为 usleep() 并不是ISO C的一部分,在glibc系统中,它在 <unistd.h> 的声明只有在启用正确的特性测试宏时才会暴露。关于 usleep() 的手册页指出,glibc只在诸如 _DEFAULT_SOURCE 的条件下声明它,或者在不具备 _POSIX_C_SOURCE >= 200809L 的情况下才在 _XOPEN_SOURCE >= 500 下声明它。它还指出,usleep() 在POSIX.1-2001中被标记为已废弃,并在POSIX.1-2008中被移除。
最好改用 nanosleep。
https://godbolt.org/z/Ezjs5qhWd
nanosleep:https://godbolt.org/z/j5Y9WKEjh
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。