概述
最近在linux下编译程序的时候遇到了几个让人很奇怪的警告,在这儿记录下来,和大家分享一下。我用的是Ubuntu 9.10的系统以及系统自带的gcc编译器。
在我的程序中用到了strdup和gethostname这两个函数,编译命令是:
gcc -c -std=c99 myfilename.c
编译器就会给出warning:implicit declaration of function 'strdup'和warning:implicit declaration of function 'gethostname'的警告
开始的时候我很奇怪为什么会出现这种警告,因为我已经包含了应该包含的头文件,我甚至去看了这两个头文件的内容,里面也有这两个函数的声明。于是我开始在网上寻找答案,网上的一个帖子说c99标准中没有strdup函数(帖子的连接http://www.unixresources.net/linux/clf/program/archive/00/00/62/11/621140.html#article621188)。
然后我就想gethostname函数是不是因为同样的原因而出现警告呢?于是我用下面的命令进行编译: gcc -c myfilename.c
这样编译的时候确实没有警告了。看来确实是c99中没有strdup和gethostname这两个函数了,我只是碰上了这两个函数,应该还有其他的函数会出现相同的问题。我现在还没有研究为什么c99中会没有这两个函数,而且编译器为什么不给这种情况的编译错误给出更多的信息。
可能很多人会奇怪为什么我在开始的编译命令中要加上-std=c99选项,其实我也不想加的,而且我最初编译的时候也是没有加-std=c99的,但是我的程序中用到了很多for循环,而且都是这样写的
for(int i = 0; i < maxloopnum; i++){
..........
}
如果编译的时候不加-std=c99,就会出现:error:'for' loop initial declarations are only allowed in c99 mode ,use option -std=c99 or -std=gun99 to compile your code.
今天要写的就是这个东西了,看来有时间的话要看看c89和c99的标准和区别了!
最后
以上就是轻松乌龟为你收集整理的gcc下编译出现warning:implicit declaration of function 'strdup'和warning:implicit declaration of function 'gethostname'的全部内容,希望文章能够帮你解决gcc下编译出现warning:implicit declaration of function 'strdup'和warning:implicit declaration of function 'gethostname'所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复