我正在尝试使用我自己的 printf 函数,所以我不想包含标准包含文件...所以我正在使用 -nostdinc
我创建的程序是这样的:
extern int printf(const char*,...);
printf("Value:%d",1234);
//printf("\n");
这段代码工作正常,但是当我使用 printf("\n")
时,它显示 undefined reference to 'putchar'
。
如果我评论 printf("\n");
然后显示 nm
命令
$ nm test1.o
U exit
00000000 T main
U printf
00000030 T _start
但是如果我使用 printf("\n");
然后显示 nm
命令
$nm test1.o
U exit
00000000 T main
U printf
U putchar
0000003c T _start
我不知道 putchar
如何以及从哪里被包含在内
gcc 版本 4.8.2 (GCC)
最佳答案
gcc
在某些情况下优化 printf
。可以看函数fold_builtin_printf
here完整的细节。 IIRC,它使用一个参数后跟一个换行符来优化对 puts/putchar
的调用。您可以通过指定 -fno-builtin
( gcc docs ) 将其关闭。
关于c++ - 如何在编译期间避免标准包含文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24474127/