首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

printf函数隐藏有关问题

2012-04-05 
printf函数隐藏问题在一个cpp文件里自己定义了一个printf函数,用g++编译,如下:int printf(const char *fmt

printf函数隐藏问题
在一个cpp文件里自己定义了一个printf函数,用g++编译,如下:
int printf(const char *fmt, ...)
{...}

int main()
{
  printf("abcdefg!");
  printf("%s","abcdefg!");
}
为什么在main里面,第一个printf调用的不是我自己定义的printf函数,第二个可以调用到。
(随便说一下,如果自己再定义一下形如printf(const char *fmt)的函数,会报重复定义,如下:
rtusetup.cpp:110: 错误:调用重载的 ‘printf(const char [18])’ 有歧义
rtusetup.cpp:60: 附注:备选为: int printf(const char*, ...)
rtusetup.cpp:54: 附注: int printf(const char*)


[解决办法]
printf不能重载。。。
[解决办法]
你看你你包含了那些库文件吧
[解决办法]
printf("abcdefg!"); 这个可能会直接被优化成了puts
单步调试,看看汇编里call的是哪个。
[解决办法]
换个名字
[解决办法]
呵呵,printf(str)被gcc优化成puts(str)我们也遇到过。
比如:
#include <stdio.h>

int main(void)
{
printf("Hello world!\n");
return 0;
}
cc -S t.c的结果就是:

.LC0:
.string "Hello world!"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
movl $.LC0, (%esp)
call puts
movl $0, %eax
leave
ret
.size main, .-main

[解决办法]

探讨

这个怎么办啊~~~

热点排行