Linux+C 语言零基础 Day2|拆解 GCC 四层编译流程,吃透 C 语言全部基础数据类型
目录前言模块 1深挖 gcc 编译四大流程代码的四层 “变形记”1.1 预处理 gcc -E1.2 编译 gcc -S1.3 汇编 gcc -c1.4 链接 gcc 最终生成可执行文件模块 2C 语言底层必学基础写代码的底层逻辑2.1 程序是如何在计算机中运行的2.2 计算机存储单位换算全二进制计数2.3 进制转换速记技巧2.4 C 语言基础数据类型电脑里不同尺寸的收纳盒2.5 常量与变量总结前言哈喽各位零基础小伙伴昨天Day1我们搞定了 Linux 虚拟机操作、终端基础命令、vi 编辑器还成功用 gcc 跑通了 Hello World 程序当时天真以为敲一句gcc test.c就能直接出可执行文件编译原理到此结束。结果第二天上课直接被狠狠 “补课”—— 原来一行 gcc 命令背后藏着四道完整工序同时还要啃完 C 语言最底层的核心基础程序运行逻辑、存储单位、进制转换、全套基础数据类型、常量与变量。本文整理了课堂完整笔记全程用生活化比喻拆解晦涩底层知识避开新手容易踩的坑没有复杂难懂的专业黑话适合刚入门 LinuxC 的小白收藏复盘模块 1深挖 gcc 编译四大流程代码的四层 “变形记”把 C 代码变成电脑能看懂的程序gcc 不会一步到位而是分预处理→编译→汇编→链接四步我用「做蛋糕」给大家类比超好记预处理拆原料包、整理食材处理 #开头指令编译把文字配方翻译成烘焙操作手册生成汇编代码汇编把手册做成蛋糕胚二进制目标文件链接蛋糕胚 奶油配件组装成完整成品可执行程序1.1 预处理 gcc -E命令gcc filename.c -o filename.i核心工作专门处理代码中所有#开头指令展开#include头文件把 stdio.h 等库内容全部塞进代码替换#define宏定义纯文本替换不会计算裁剪#if/#ifdef/#else条件编译无效代码删除全部注释内容。1.2 编译 gcc -S命令gcc filename.c -o filename.s把处理完的 C 语言代码翻译成汇编语言文本文件检查语法错误代码有拼写 / 语法问题会在这里直接报错。1.3 汇编 gcc -c命令gcc filename.c -o filename.o将汇编代码转为纯二进制机器码生成目标文件.o此时文件电脑能识别但还无法独立运行。1.4 链接 gcc 最终生成可执行文件命令gcc filename.c -o filename把.o目标文件、系统库文件整合拼接生成我们能直接运行的程序不加-o指定名称默认生成a.out。运行程序命令./程序名模块 2C 语言底层必学基础写代码的底层逻辑2.1 程序是如何在计算机中运行的我们写的.c源码、编译好的可执行程序全都存放在硬盘外存执行程序瞬间系统会把二进制程序加载进内存CPU 读取内存指令执行程序运行结束系统回收内存空间数据清空。2.2 计算机存储单位换算全二进制计数计算机只识别 0 和 1最小单位是 bit位1 Byte字节 8 bit1 KB 1024 Byte1 MB 1024 KB1 GB 1024 MB1 TB 1024 GB2.3 进制转换速记技巧二进制逢二进一0、1八进制逢八进一十进制日常数字十六进制0-9、a-f任意进制转十进制每一位数字 × 当前位权值全部相加十进制转其他进制数字反复除以目标进制余数倒序排列二进制快捷转换3 位二进制对应 1 位八进制4 位二进制对应 1 位十六进制。2.4 C 语言基础数据类型电脑里不同尺寸的收纳盒数据类型就像收纳盒大小不同能存放的数据范围、格式完全不一样分为基本数据类型系统自带和构造类型自定义。1整型存放整数short 短整型占 2 字节signed short默认范围 -32768 ~ 32767unsigned short范围 0 ~ 65535int 整型占 4 字节signed int-21 亿21 亿unsigned int0 ~ 42 亿long 长整型占 8 字节signed long超大正负整数unsigned long0 ~ 2⁶⁴-12浮点型存放小数float 单精度4 字节1 位符号 8 位指数 23 位尾数仅 6~8 位有效数字double 双精度8 字节精度更高12~16 位有效数字代码中小数默认 double 类型。3char 字符型最小收纳盒仅 1 字节本质存储 ASCII 码数字不是直接存文字unsigned char0~255signed char-128~127例字符’A’对应 ASCII 码 65单引号只能包裹单个字符。4bool 布尔逻辑类型只有两个值true (1)、false (0)C 语言规则非 0 数字全为真0 为假。5void 空类型无固定存储空间多用于函数参数、指针代表 “无数据”。2.5 常量与变量常量程序运行全程不能修改的值整型常量123、0123八进制、0x1a十六进制、100U/100L浮点常量3.14、3.14f、1e5字符常量单引号包裹单个字符 ‘0’、\n’转义字符字符串常量双引号包裹末尾自动隐藏结束符\0“a” ≠ ‘a’宏定义常量#define M 50仅纯文本替换写宏建议全部加括号避免计算 bug。变量运行过程中数值可以随时修改定义后分配内存空间赋值后可重复修改是程序存储临时数据的核心。总结今日核心知识点复盘gcc 编译四阶段预处理 (-E)→编译 (-S)→汇编 (-c)→链接每个阶段有专属命令与产物程序运行流程外存存放代码运行载入内存结束回收内存存储单位、进制转换是底层基础看懂数据存储必备五大基础数据类型对应不同内存大小选错类型会出现数据溢出、浪费空间常量不可修改变量支持重复赋值宏定义只是文本替换不是运算。新手踩坑提醒Linux 文件名区分大小写尽量不用空格用下划线替代宏定义一定要给表达式加括号否则四则运算会出错字符串自带\0结束符不要混淆字符’a’和字符串a小数默认是 double写 float 小数末尾要加 f无符号数字不能存负数否则会出现溢出乱码。