为什么自己对应的printf不会和标准库stdio.h中的printf发生冲突呢?
// 自己实现printf:typedef char* va_list;
#include <stdarg.h>
#include <stdio.h>
int printf(char* format,...)
{
va_list ap;
va_start(ap, format);
int n = vprintf(format,ap);
va_end(ap);
return n;
}
int main()
{
printf("sd\n");
return 0;
}
----------------解决方案--------------------------------------------------------
会冲突啊,如下:
D:\My Documents\bbs\c_test>type my_printf.c
#include <stdarg.h>
#include <stdio.h>
typedef char* va_list;
int printf(char* format,...)
{
va_list ap;
va_start(ap, format);
int n = vprintf(format,ap);
va_end(ap);
return n;
}
int main()
{
printf("sd\n");
return 0;
}
D:\My Documents\bbs\c_test>gcc my_printf.c
my_printf.c:5: error: conflicting types for 'printf'
my_printf.c:5: error: conflicting types for 'printf'
----------------解决方案--------------------------------------------------------
不冲突会不会是因为include查找路径的顺序造成的呢????
----------------解决方案--------------------------------------------------------
不冲突可能是因为链接目标文件时按某个顺序查找,找到后就返回了,猜测查找顺序是先在用户源代码生成的目标文件中查找,找不到就去C运行时库中找。
----------------解决方案--------------------------------------------------------
回复 2# 的帖子
你使用的是什么编译器,怎么会冲突呢?? ----------------解决方案--------------------------------------------------------
我这里也发生冲突
$ cc pf.c
pf.c:7: error: conflicting types for 'printf'
pf.c:7: error: conflicting types for 'printf'
环境:freebsd cc编译
----------------解决方案--------------------------------------------------------
一般都是冲突的..因为编译器不知道你调用了那个函数...
----------------解决方案--------------------------------------------------------