#include "apue.h"
int
main(void)
{
printf("uid = %d,gid = %d\n",getuid(),getgid());
exit(0);
}
编译后报错:隐式声明与内建函数‘printf’不兼容
原因:作者是为了减少书中示例代码的长度,将很多包含头文件的代码封装到了apue.h
解决:
方法一
下载源码
从unix高级编程书籍官网下载书籍的上的所有源码。
http://www.apuebook.com/code3e.html
解压这个文件
tar -zxvf src.3e.tar.gz
解压后文件会放在apue.3e目录下,这个目录里包含了书本上的源码,也包含了apue.h和error.c文件。
复制apue.h到/usr/include/下
cp ./apue.3e/include/apue.h /usr/include/
/usr/include/下并没有这个文件,所以放心复制吧。
复制error.c到/usr/include/下
cp ./apue.3e/lib/error.c /usr/include/
这里的文件是error.c,不是error.h,/usr/include/目录下有一个error.h的头文件。
编辑/usr/include/apue.h文件
在文件最后#endif前加上包含error.c的代码:
#include "error.c";
弄完之后重新编译代码文件,OK搞定了。如果需要了解更多信息,可以查看apue.3e目录下的README文档。unix发展到后来延伸出很多分支,在书中也有提及,如果你对自己的系统不了解,可以运行apue.3e目录下的systype.sh,它会告诉你你的系统是什么。
方法二
编译后出现警告:隐式声明与内建函数’XXX’不兼容的问题所在都是因为没有包含相应的头文件,加上就OK!
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("uid = %d,gid = %d\n",getuid(),getgid());
exit(0);
}