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

img

在gcc存在之前,是如何将c语言编译并运行的呢,文中说c语言之父写了Unix,可是又说后来才有的gcc编译器,是怎么回事呢

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

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7529241
  • 这篇博客也不错, 你可以看下用gcc编译器运行c语言程序
  • 除此之外, 这篇博客: Linux实验四:编译和调试工具的使用中的 1、用gcc编译程序,写出编译过程,并给出运行结果。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • mypow.c:定义mypow()函数

    unsigned long long mypow(unsigned int x, unsigned int y)
    {
            unsigned long long res=1;
            if (y==0)
                    res = 1;
            else if (y==1):
                    res = x;
            else
                    res = x * mypow(x, y-1);
            return res;
    }
    

    powtest.c:调用mypow()函数

    #include <stdio.h>
    #include <stdlib.h>
    int main(int argc, char *argv[])
    {
            unsigned int x, y;
            unsigned long long res;
            if ((argc<3) || (sscanf(argv[1], "%u", &x)) != 1 || (sscanf(argv[2], "%u", &y)) != 1 )
            {
                    printf("Usage:pow base exponent\n");
                    exit(1);
            }
                                                                                                   
            res = mypow(x, y);
            printf("%u ^ %u = %u\n", x, y, res);
            return 0;
    }
    

    gcc -o命令编译

    在这里插入图片描述

    gcc命令编译

    在这里插入图片描述
    在这里插入图片描述

    要注意实验中给出的powtest.c文件里没有对mypow.c头文件进行引用,因此做实验的时候自己要加这个头文件如下图第四行

    在这里插入图片描述

  • 您还可以看一下 夏曹俊老师的Linux编程之GCC编译工具实战课程中的 课程介绍小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    在没有gcc编译器的情况下,C语言也可以进行编译和运行。早期的C语言开发者通常会使用一些基本的工具链,将C代码翻译为汇编代码,再汇编为可执行代码。这样的工具链通常由以下几个组成部分:

    1. 编辑器:用于编写代码的文本编辑器,如vi、emacs等
    2. 汇编器:从汇编代码生成可重定位目标文件的程序
    3. 链接器:将许多可重定位目标文件最终链接为一个可执行文件的程序

    这些工具通常是分别由不同的开发者开发的,而且使用方法并不统一。在这种情况下,开发者需要自己研究如何将它们组合在一起使用。这也是为什么后来出现了gcc编译器的原因。gcc提供了一个完整的工具链,包括了编辑器、编译器、汇编器和链接器,简化了工具链的使用,提高了开发效率。此外,gcc还支持许多高级语言和编译器特性,使得开发者可以更加高效地编写和调试代码。