编译,运行程序这涉及到程序是怎样装入内存运行的。一般的,程序装入内存需要经过编译,链接,装入三个步骤。对于C++来说,编译后生成的是.obj文件,也就是所谓的目标文件,这时候的代码之间的逻辑功能是独立的。比如说你调用了库函数,但此时在你的主调函数中的二进制代码并没有与这个库函数的二进制代码发生关系,只有经过链接之后才会完成各个目标块之间的链接。这时候生成的就是.exe的可执行文件了(这是在WIndows下面的格式)。但是这时候的程序并不能运行,经过装入这一步后,程序被加载到内存中,这时程序就真正可以运行了。当然这几个步骤你只要用你的程序开发工具就可以完成。
编译时只能够检查出程序的语法错误,而不能够检查出语义错误。比如说除数为0这就是一个动态语义错误,只有在运行时才能够发现问题。C++中在子类中重写父类的方法,在调用时就是动态语义。
具体到你这个程序,由于你声明一个全局对象,声明时对象的构造函数会自动调用,且先于主函数的执行。但是主函数是整个应用程序的入口,main()函数是操作系统调用的。不信,你把你的主函数注释了,编译器就会提示,有一个无法解析的外部命令。
要弄懂程序在机器里面是怎么跑的,光学程序设计语言是不够的。还有很多计算机方面的知识需要掌握,比如,操作系统,汇编语言,计算机组成原理等等,这些课程有利于你更好的理解高级语言。
先编译,再运行
全局对象 test anobject; 构造函数执行的时候会有输出。
全局对象的构造先于main函数的执行。
编译(compilation , compile)
1、利用编译程序从源语言编写的源程序产生目标程序的过程。
2、用编译程序产生目标程序的动作。
运行:
将编译的代码执行(进行相应的解释)
因为程序是从主函数入口进行解释运行,你没有调用程序就不执行相应的代码,其它的代码,它视而不见,为什么不正常运行呀?