gcc下编译出现warning:implicit declaration of function 'strdup'和warning:implicit declaration of function 'gethostname'

       最近在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')