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

时间:2014-06-29 07:47:21

标签: c++ c

我正在尝试使用自己的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 version 4.8.2 (GCC)

1 个答案:

答案 0 :(得分:6)

在某些情况下,

gcc会优化printf。您可以查看函数fold_builtin_printf here以获取完整的详细信息。 IIRC,它通过一个参数优化调用,然后是puts/putchar的换行符。您可以指定-fno-builtingcc docs)。

将其关闭