编译(不连接)时,GCC的优化选项-O2会自动把一些函数嵌进来?解决方案

编译(不连接)时,GCC的优化选项-O2会自动把一些函数嵌进来?
main.c:
int   main()
{
        printf( "Hello,   world!\n ");
        return   0;
}

两种编译方法:
1.   gcc     -c   -o   main.o   main.c
2.   gcc     -O2   -c   -o   main.o   main.c

前者的main.o中没有puts函数,后者中有puts函数──可以这样查看:grep   "puts "   main.o
这说明:-O2选项使得编译时使用了库中的printf?

我想使用自己写的printf函数,并且使用-O2选项,请问怎么办?

------解决方案--------------------
应该不影响你使用自己写的printf吧,-O2只是改变一些编译优化选项
如果实在不行的话,你还可以用宏来替换呀
#define printf my_printf
int my_printf(const char*, ...);
------解决方案--------------------
你那样只是表示main.o中有puts这个字符串而已,你怎么确定由这个函数?