我在Ubuntu 15.04上使用GCC 4.9。我在Eclipse CDT中编码。这是一个C语言程序,其方言设置为c99。由于某种原因,我的编译器会不断警告我有关此问题的信息...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中?
最佳答案
必须在任何#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
或
在Ubuntu中使用GCC,它必须是前两个之一,因为C库绝对可以提供这些POSIX.1功能。
关于c - posix_memalign的警告隐式声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32438554/