你说的是运行,编译可不一定。我举个反例,比如你做一个静态库lib,或者动态库dll,然后另外一个人引用它们,那个人写的代码里面有main,如果非要从main开始的话,那么你的dll或者lib啥时候开始?
你这个程序的执行顺序是这样的,首先执行main函数,然后调用fun方法。fun方法中返回i+j,但是由于你把i和j写在了fun函数外,为全局变量。并且是定义在了fun函数的下面,所以编译器不能识别到。将i和j的定义写在fun的上面,就可以编译通过
编译是从上到下吧,多个源文件的话不清楚