前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >gcc编译出现:error: dereferencing pointer to incomplete type

gcc编译出现:error: dereferencing pointer to incomplete type

作者头像
恋喵大鲤鱼
发布2018-08-03 17:11:48
2.4K0
发布2018-08-03 17:11:48
举报
文章被收录于专栏:C/C++基础C/C++基础

使用gcc编译c文件出现如下错误: getIP.c:14: warning: implicit declaration of function ‘gethostname’ getIP.c:20: warning: implicit declaration of function ‘getaddrinfo’ getIP.c:21: error: dereferencing pointer to incomplete type getIP.c:23: error: dereferencing pointer to incomplete type getIP.c:25: error: dereferencing pointer to incomplete type

编译方式: gcc -std=c99 getIP.c

编译环境: Red Hat Enterprise Linux Server release 6.4

源文件getIP.c:

代码语言:javascript
复制
#include <sys/socket.h>
#include <netdb.h>
#include <sys/types.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h> 

#include <stdio.h>
#include <stdlib.h>

int main(int argc,char* argv[])
{
char host_name[128]={0};
gethostname(host_name, sizeof(host_name));
printf("host_name:%s\n",host_name);

struct addrinfo *ailist=NULL,*aip=NULL;
struct sockaddr_in *saddr;
char *addr;
int ret=getaddrinfo(host_name,"ftp",NULL,&ailist);
for(aip=ailist; aip!=NULL; aip=aip->ai_next)
{
    if(aip->ai_family==AF_INET)
    {
        saddr=(struct sockaddr_in*)aip->ai_addr;
        addr=inet_ntoa(saddr->sin_addr);
    }
    printf("addr:%s\n",addr);
}
getchar();
return 0;
}

以上是问题的主要描述,很奇怪的是换成g++编译没有任何问题: g++ -std=c++0x getIP.c

在CSDN论坛中发帖寻求帮助,几度困惑和无助,但皇天不负有心人,此问题的出现是因为gcc使用了编译选项-std=c99,去掉该编译选项,顺利通过编译。 原因可能是struct addrinfo 的定义并不在c99标准中。

我们可以使用最新的c11标准,但是前提是gcc需要4.7版本之后,才真正支持c11的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年09月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档