目录

         一、目的

二、实验环境

三、内容与步骤

1. Hello World程序

2. 多文件程序(main1.c+sub.c)

3. Makefile编译

四、实验总结


一、目的

  1. 掌握Ubuntu下C语言编译与运行流程

  2. 学会多文件C程序的编写与跨系统编译的区别

  3. 理解Makefile的使用方法

二、实验环境

  • Ubuntu 20.04(gcc )

  • Windows 10(VS 2022)

  • Typora(Markdown编辑器)

三、内容与步骤

1. Hello World程序

  1. 创建文件:touch hello.c

    打开文件:vim hello.c

  2. 编写代码:

    #include <stdio.h> 
    int main() { 
        printf("Hello World\n"); 
        return 0; 
    }

  3. 编译:

    gcc hello.c -o hello

  4. 运行:./hello,结果:Hello World​​​​​​

2. 多文件程序(main1.c+sub.c)

  1. 创建main1.c,sub.c

    touch main1.c
    
    touch sub.c

  2. main1.c和sub.c

    main1.c
    
    #include <stdio.h>
    // 声明x2x函数
    float x2x(int a, int b);
    
    int main() {
        // 定义并赋值两个整型变量
        int num1 = 10, num2 = 3;
        // 调用x2x函数
        float result = x2x(num1, num2);
        // 输出
        printf("运算结果:%.2f\n", result);
        return 0;
    }
    // 实现x2x函数,返回两数相加的浮点数结果
    float x2x(int a, int b) {
        // 避免除数为0(可选增加判断)
        if (b == 0) return 0.0;
        return (float)a / b;
    }

  3. Ubuntu编译:gcc main1.c sub1.c -o main1,运行结果:运算结果:13.00

  4. Windows编译:代码与什么相同,且输出结果一致

  1. 由于我使用的Windows的编译器为VS2022,且main1.c和sub.c在一个项目内不需要我再用头文件所包含引用,如有报错,可添加一个sub.h头文件申明x2x函数,并在main1中引用这个头文件。

  2. gcc编译流程

3. Makefile编译

  1. 创建、打开Makefile:

    touch Makefile

    vim Makefile

  2. 编写代码

    
    #定义可执行文件
    
    target = main1
    
    #定义源文件
    
    src = main1.c sub1.c
    
    #定义编辑器
    
    cc = gcc
    
    #编译生成可执行文件
    
    $(target): $(src) $(cc) $(src) -o $(target)
    
    #清理目标,删除可执行文件
    
    clean: rm -f $(target)
  3. 编译:make,运行:./main1,结果正确

  4. 清理:make clean

四、总结

     在本次Ubuntu系统C语言编程实验中,我重点实践了两种生成可执行文件的编译方式:一是通过gcc命令直接编译,二是编写Makefile实现自动化编译。其中,gcc作为更“原生”的编译工具,让我得以深入理解C语言源程序到可执行文件的完整转化流程——从预处理、编译、汇编到链接的每一步,都能通过命令交互清晰感知,而非像Windows系统下的IDE那样,用“一键编译”简化掉所有细节。
    不可否认,IDE的便捷性确实降低了操作门槛,但也在一定程度上屏蔽了编译过程的核心逻辑;而Ubuntu下的手动编译实践,恰恰填补了这一认知空白,让我真正明白源文件是如何通过多步处理最终成为可执行程序的,也让我对C语言程序的运行原理有了更底层、更透彻的理解。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐