C语言的编译器只是一个流处理器(Stream processor),它不关心代码是存放在哪里,甚至不看这个代码文件是什么,文件名是什么。
它只是做某种自动的检测(auto-detection,不关心),编译器在这个自动检测过程中做的唯一事情就是在自动检测的初始化文件中写到的事情,这个include只是把一个文件逐字逐句的插入来,就像复制粘贴一样,不会去看它什么名字,不管它是.c 还是 .cpp。
重写
如果先编译main.cpp 就不会报错,因为编译器采用的是c++的编译模式,支持C的;但要是先编译Main2.c 就报错,这时的编译器会采用C的编译模式,于是就识别不了class,报错。
简而言之,C编译器做的就是,获取一个大的旧文本流,假定他们是C或C语言编写,并将其转化为输出文件格式。
在C的编译过程中,如果遇到没有事先定义的函数调用,则先假定有那么个函数,并在编译过程中把那个函数的调用也正常的编译,因为,C编译器觉得在link中会有这个函数的定义,如果link里没有,则link时报错。
相反,C++编译器在编译时就报错,如下
//main.c
int