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
[解决办法]