同样一段代码,但是用gcc编译是通过的,用g++编译是不通过的?

图片说明
如图所示,同样一段代码我并没有#include ,但是用gcc编译是通过的,用g++是编译是不通过的?

gcc是c语言编译器,g++是c++编译器,c++在某些方面有扩展

换一种编译器运行试一下

gcc是c语言的编译器,g++是c++的编译器,但也能运行c语言的代码。应该是特殊符号变了

应该是编译器的默认设置是不同的,虽然g++支持c语言,那是语法上的,对于系统中库的链接,gcc和g++还是有区别的。

你的代码本身就是错的,用到puts的时候需要引入头文件,C引入string.h C++, 引入 cstring。 另外就是C++还有一个头文件string 这个头文件是字符串类,与cstring有区别。
另外你的gcc通过了,这是因为C语言一个非常傻的规定:一个函数如果没有声明函数原型,其返回值类型就是int(所谓的implicit declaration)。由于puts恰好真返回int,所以你即使不包含它的头文件也不报错。至于这个警告,是为了避免你由于忘记声明函数原型而出错。而真正的puts已经被隐式声明了。

你需要显示的引入头文件string.h 即可。gcc默认帮你引入了。

c++需要声明后使用。gcc会链接libc.so.6,这个里面有函数,应该是gcc猜测了一下函数原型然后在链接库里面也找到了实现。

因为编译器的区别,puts应该是在stdio.h里面,即使不写gcc也能认识, 就好像gcc本身就内嵌来stdio.h一样,或者可以说是默认引用stdio.h
g++则没有干这件事

反过来说,不加stdio.h是不严谨的