编译器看到struct关键字后,会尝试下一个identifier,如果有,那么这就是一个带tag的struct声明,编译器会在符号表中查找这个tag是不是已有声明,若是,则取用之,否则创建新的struct tag声明,并插入符号表,然后检查是否有结构体的"体",也就是大括号部分,若有,则在大括号后面,会将刚才这个struct tag的类型置为complete的,typedef 只是声明一个类型名字,没有定义变量。
编译器就是将“一种语言,通常为高级语言”翻译为“另一种语言,通常为低级语言”的程序。
一个现代编译器的主要工作流程:源代码 → 预处理器 → 编译器 → 目标代码 → 链接器 → 可执行程序 。
编译是从源代码到能直接被计算机或虚拟机执行的目标代码的翻译过程。
然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。
也有从一种高级语言生成另一种高级语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器。
1.编译方式为编译和运行。
即先通过一个存放在计算机内的.称为编译程序的机器语言程序,把源程序全部翻译成和机器语言表示等价的目标程序代码,然后计算机在运行此目标代码,以完成源程序要处理的运算并取得结果。
2.解释方式是每执行一句就翻译一句即边执行边解释。
这种方式每次运行程序时都要重新翻译整个程序,效率较低,执行速度慢。