为什么它会发出隐式声明的警告?

编程语言 2026-07-12

我正在使用 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

nanosleephttps://godbolt.org/z/j5Y9WKEjh

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章