隐式声明函数usleep

gcc (GCC) 4.6.3 c89 

我想用usleep 。 但是,我一直收到以下警告:

隐式声明函数usleep

我已经包含了unistd.h头文件。

该手册提到了一些关于此的内容。 但我不确定我理解它:

 usleep(): Since glibc 2.12: _BSD_SOURCE || (_XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) && !(_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700) Before glibc 2.12: _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED 

但不确定我对上述内容做了什么?

该列表是定义usleep的前提条件。 它基本上是一个涉及#define变量的类似C的表达式,在包含头文件之前必须为true。

头文件本身只会定义内容通常是#ifdef语句的大量嵌套,开发人员花时间告诉你需要做什么,这样你就不必花费数小时试图弄明白自己:-)

假设您使用glibc 2.12或更高版本,则意味着您必须:

  • 声明_BSD_SOURCE; 要么
  • 声明其他三件事的复杂组合,我不打算解码。

可能最简单的解决方法是简单地用gcc -D _BSD_SOURCE编译或者放:

 #define _BSD_SOURCE 

在包含头文件之前的代码中,该文件为您提供了usleep

您可能希望在任何包含之前定义这些,以防各种头文件之间存在依赖关系。

这可能有效:在Linux上使用gcc编译时添加-std=gnu99

例:

 arm-linux-gcc -lpthread -std=gnu99 -o test ArmLinuxDataPipe1.2.1.c 

使用nanosleep()代替我工作。

相关说明:自POSIX-2008以来已删除usleep()并建议使用nanosleep()代替。

Interesting Posts