我已经在 Turbo C++ 3.0、VC++ 2008 express 和 Borland C++ 6 上测试了这个事实。
如果我将一个扩展名为 *.C 的 C 程序添加到项目中,我可以在不包括头文件的情况下编译和运行程序。但是,在这种情况下,一些函数(如 sqrt() 等)会返回错误的值。
如果我将一个扩展名为 *.CPP 的 C++ 程序添加到项目中,则无法在不包括头文件的情况下编译和运行程序。
为什么呢?
我已经在 Turbo C++ 3.0、VC++ 2008 express 和 Borland C++ 6 上测试了这个事实。
如果我将一个扩展名为 *.C 的 C 程序添加到项目中,我可以在不包括头文件的情况下编译和运行程序。但是,在这种情况下,一些函数(如 sqrt() 等)会返回错误的值。
如果我将一个扩展名为 *.CPP 的 C++ 程序添加到项目中,则无法在不包括头文件的情况下编译和运行程序。
为什么呢?
在C语言中,默认情况下函数的返回类型是int,即使没有声明原型也可以使用例如libc函数。当然,如果它的返回值不是int,则会得到错误的值。
C++更加严格并禁止此操作。
此外,gcc将某些函数实现为内置函数。如果使用了这些函数,可以尝试使用-fno-builtin选项进行编译。