我在ubuntu 15.04上使用GCC 4.9。我在eclipse CDT编码。这是一个方言设置为c99的C程序。出于某种原因,我的编译器一直在警告我......
warning: implicit declaration of function ‘posix_memalign’ [-Wimplicit-function-declaration]
我不确定为什么。我在顶部有#include<stdlib.h>
,当我使用eclipse时,按住ctrl +单击posix_memalign它会转到stdlib.h中的函数声明。为什么我会收到此警告?
我只是尝试将dialext更改为std = gnu99,这解决了这个问题。 posix_memalign不包含在c99中吗?
答案 0 :(得分:4)
必须在任何#define _POSIX_C_SOURCE 200809L
行之前定义#include
和其他feature test macros。
这是因为宏告诉标准C库头部它应该提供哪些功能,而不是标准C库功能;功能在#include
点“锁定”。
posix_memalign()
由stdlib.h
提供,但仅在启用POSIX.1-2001或更高版本时提供;这意味着将_POSIX_C_SOURCE
定义为200112L
或更大(L是因为它是long
类型的整数常量),或_XOPEN_SOURCE
600
或更大
显示的错误仅在
时出现包含stdlib.h
时未定义宏
或
stdlib.h
未包含在内
或
C库实现不提供POSIX.1功能
在Ubuntu中使用GCC,它必须是前两个中的一个,因为C库肯定会提供这些POSIX.1功能。