隐式声明函数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()代替。