gcc是如何在不同机器上编译C源码的？
既然gcc的最终编译结果是将C编译成.exe或.out这样子的由二进制组成的可以直接执行的文件， 而不同机器CPU的机器语言指令又不同，
gcc是如何确定每个C的关键字或语句对应当前机器中的哪个二进制指令？
> 不同机器CPU的机器语言指令又不同

首先要确保题主正确地理解了这句话。不同CPU的机器指令不同，说的是不同架构/类型的CPU指令不同。比如x86是一种指令集，x86_64是另一种指令集，它兼容x86.又比如armv7是一种指令集，和x86系列不兼容。大多数Intel的CPU(ia64)除外，都支持x86/x86_64指令集。所以在这些电脑上用gcc编译出来的代码是一样的。

gcc也分版本的。比如x86上的gcc和arm上的gcc是不一样的，编译出来的指令是它对应的那种指令集的。只不过平时我们默认安装的总是当前系统匹配的那种gcc.如果要在一种CPU架构上编译出另一种架构CPU的可执行文件，就需要安装对应版本的gcc.这叫做交叉编译。那时候就需要指定gcc的版本了，比如x86-64-linux-gnu-gcc, 或者aarch64-linux-gnu-gcc.