如何在编译期间避免使用标准包含文件

raj*_*dit 5 c c++

我试图使用自己的printf函数,所以我不想包含标准的包含文件...所以我正在编译我的代码 -nostdinc

我创建了我的程序,如下所示:

extern int printf(const char*,...);
printf("Value:%d",1234);
//printf("\n");
Run Code Online (Sandbox Code Playgroud)

这个代码工作正常,但是当我使用printf("\n")它然后显示undefined reference to 'putchar'.

如果我评论printf("\n");那么nm命令显示

$ nm test1.o
         U exit
00000000 T main
         U printf
00000030 T _start
Run Code Online (Sandbox Code Playgroud)

但如果我使用printf("\n");那么nm命令显示

$nm test1.o
         U exit
00000000 T main
         U printf
         U putchar
0000003c T _start
Run Code Online (Sandbox Code Playgroud)

我没有得到如何以及从哪里putchar获得

gcc version 4.8.2 (GCC)

Pra*_*han 6

gccprintf在某些情况下优化.您可以在fold_builtin_printf 此处查看此功能以获取完整的详细信息.IIRC,它使用一个参数优化调用,然后使用换行符puts/putchar.您可以通过指定-fno-builtin(gcc docs)将其关闭.