如果大家能对我的文章推荐一下,关注一下本人博客,那就更开心了,我今后也会更多的写一些计算机系统/原理类的文章,以飨各位读者。再次谢谢。前段时间看了　周志明的那本　《深入理解java虚拟机》。对于　平台无关性　问题,有了一些新的认识。所以特写一篇博客来进行总结。　这是我的第一篇不针对具体技术,而只针对计算机系统和原理的博客文章,而这种话题,总是比较宽泛,而我本人的水平有限,所以我也只能泛泛的写写,思考的不对的地方,还望读者不吝批评。　C为什么不能跨平台　咱们先来讨论一下,C语言的执行过程,从而搞清楚为什么C语言不能跨平台。　//@author　www.yaoxiaowen.com　转载文章请注明出处。　//　本文地址:http://www.cnblogs.com/yaoxiaowen/p/7470460.html　#　include　　int　main　(){　printf(　"Hello,　World!");　return　0;}　以上就是广大人民群众　都知道的　hello　world　程序。最终执行的结果　就是在console上输出一行字符串,　hello　world!　。　大学时,谭浩强的C语言教材,　main　方法的返回值是　void　,但这是错误的。实质上应该返回　int　来告诉操作系统执行结果。(当然,后来学习的深入了,才知道谭的教材有不少错误的地方,但是我对这本教材依旧印象很好,因为那是我编程的启蒙教材)。　我们知道,计算机只认识0和1(就是二进制),换句话说,不管我们在计算机上干了什么事情,运行了多么复杂的程序,从ps绘图,到qq聊天,再到听音乐,最终到了CPU的执行层面,其实就是　一串串的0和1组成的指令罢了。　当然,到了硬件层面,那就是与或非门的领域了。但是,上面的那个　hello　world　程序是怎么转换为0和1的呢。　一般情况下,对于我们使用的是　IDE,比如　Visual　Studio,　CodeBlocks之类的,就是点击个运行按钮那么简单,或者你就是使用了gcc命令行来进行编译,也可以一行命令　gcc　-o　hello　hello.c　,就　输出了最后的编译结果。但是实际上,　hello　world　的编译过程是这样的:　我们分阶段来讨论:　预处理阶段　。