为什么先有c语言,后有gcc

img

为什么c语言之父先用c语言写了Unix,之后才有人开发出了gcc编译器,在gcc之前是有更古早的专用不通用编译器之类的吗?求告知~

学过汇编语言吗,如果你在大学的课程里学过汇编语言,那应该会有亲手将汇编语言翻译成指令码的经历吧
编程语言只是方便我们写程序,它并不是天然的就能被翻译成可执行的二进制指令
gcc出现之前,这个过程基本是手动完成的(当然不会是纯手动,而是需要自己用多个外部工具去翻译)
而gcc能够将高级语言先翻译成汇编语言再翻译成指令码,一步到位,直接生成可执行文件

第一个gcc编译器肯定是 别的语言写的,然后再用这个编译器 进行迭代开发,用c语言重新编写一个gcc编译器,最终实现 程序自身的自举,也就是自己编译自己。

最早的c语言是纯汇编写的,最早的unix也是汇编写的,这是60年代到70年代的事情。gcc出来的时间就更晚了,基本上要到90年代才有。
也许你没有概念,c语言在70年代被看作一种"奢侈"的高级语言,实际上,就算dos、bill gates写的basic解释器、以及wps这样的应用软件都基本上是汇编直接写的。

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7742342
  • 这篇博客也不错, 你可以看下C语言编译器之一,GCC编译器
  • 除此之外, 这篇博客: gcc用法记录与c语言编译过程中的 三、预处理问题 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include<fun.h>#include"fun"
    <>在库里找
    “”在当前文件夹下与库里都找
    当一个头文件不在当前文件夹下,而在其他路径时,可使用
    gcc -I 文件路径
    如在1.c中加入
    #include<fun.h>
    在1.c所在的文件夹下并没有fun.h这个文件,fun.h位于该文件夹下的fun文件夹中,可用
    gcc -I -o 2 1.c

    在处理宏定义时也有一个注意的问题

    #include<stdio.h>
    #define ABC 10+8
    
    int main()
    {
            printf("%d",ABC*5);
            return 0;
    }
    
    #include<stdio.h>
    #define ABC (10+8)
    
    int main()
    {
            printf("%d",ABC*5);
            return 0;
    }
    

    前者输出50,后者输出90

  • 您还可以看一下 王利涛老师的C语言嵌入式Linux编程(1)--C语言进阶学习路线指南课程中的 使用GCC、Make编译源程序小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    C语言之父先使用C语言编写Unix操作系统,然后才有其他人开发出了gcc编译器的原因在于,C语言是Unix操作系统中最适合的编程语言,具备高效、简单、可移植等优点,而Unix操作系统也需要一种高效、简单、可移植的编程语言来开发。在gcc出现之前,还有其他更古老的专用且不通用的编译器,如AT&T asm、PCC等。但这些编译器都存在缺点,如AT&T asm只能编译汇编语言,而PCC虽然能够编译C语言,但不如gcc稳定和强大。

    解决方案:无

    因为问题已经得到很好的回答了,这里无需提供额外的解决方案。