我在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
  • C库实现不提供POSIX.1功能

  • 在Ubuntu中使用GCC,它必须是前两个之一,因为C库绝对可以提供这些POSIX.1功能。

    关于c - posix_memalign的警告隐式声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32438554/

    10-09 23:30