c++ - 如何在编译期间避免标准包含文件

标签 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 版本 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/

相关文章:

C++ 指针 : overload operator++

c++ - 在 C++ 中使用嵌套 vector

c - C 中的 strstr() 和未初始化值

大型机上的C void指针

c++ - 将目录中的所有文件名保存到 vector 中

c++ - 在数组中查找整数的有效分配(具有给定顺序的排列)

C++ Stack 通用类,int 变量获取 32765 作为值而不是 1

c - 函数返回指向 C 中数组类型的指针

c++ - 有没有办法获取我发送给 C++ 中的对等方的 OpenSSL X509 证书名称?

c - 将文件分成相等的部分,每个部分 128 字节