从一窍不通开始的独立制作人路 C语言 Chapter1 C基础认知
电脑的基本认识
这里不会细致说明,仅以了解为主。
首先要有电源,电经变压后才能给后续用。所有的大件都落在一个基本的,物理的平台上,主板(mother board)。
CPU:中央处理器,电脑核心。管运算与控制,其内部也有寄存器设定,但主要功能不是存储,而是一条需要处理的指令来了,在这临时落个脚,后进入CPU,再带着处理的结果返回。
RAM:临时存储介质,内存条。读写数据时的暂存区,或称缓冲区。没有持久化数据功能,你不能指望一段数据经历了立刻断电还能活在RAM。
Hard Drive:持久化存储介质,硬盘。数据实际能写入的地方,为了保存妥善,中途不断电仍是必要的,否则内容报废。一般情况下,这个持久化存储指的是经常通电,用于唤醒硬盘状态;故意置于风险环境(强磁场)或不通电闲置100年,那数据该消失还是消失。
持久化存储介质种类
HDD:机械硬盘,旋转运作。读写时要加速盘旋转,并使磁头有规律的触到盘面,完成读写。属于传统硬盘,抗物理干扰属上乘,很长时间不通电不会影响盘磁性,读写慢于现代硬盘,适合存储不经常动的确定性资料。
SSD:固态硬盘,操作元件电位并锁住电子运作。读写时切换存储介质的电位,用“放电子”,“锁电子”,模拟0和1。受电流波动影响严重,不标准操作时比机械硬盘更易损坏,丢失数据。属于现代标准硬盘。抗物理干扰弱(元件精密),固态硬盘如果做库存介质要经常通电,否则元件有可能失活锁不住电子。纯电驱动,符合电器运作本质,读写显著快于机械硬盘,通电很频繁时适合做处理数据的存储区,系统启动盘,如电脑内接硬盘。不频繁时最好限制在文件转移场景,不做持久存储打算,你猜不到逻辑失能和物理意外哪个先来。
辅助设备:多指键盘鼠标画板……等外部信号输入设备,外部设备只传电信号,CPU直接读读不懂,需要借助驱动翻译。驱动,本质就是外部电信号按CPU期望的解释进行翻译的过程,行使翻译官功能。
其他主流设备:显卡,网卡,声卡,这些处理数据偏并发,显卡专注于shader,视觉性AI算法;网卡专注于发收包,解析协议与字符;声卡专注于多轨多频,数模转换问题;在此仅了解。
存储单位映射
仅以日常用平台为例,如我的windows
bit:位,值仅0或1,代表内存条元件里的高低电平。
byte:字节,8 bits = 1 byte,最小可寻址单位。
1024 bytes = 1 KB;1024 KB = 1 MB;1024 MB = 1 GB……转化呈1024映射。
从KB开始,往后的单位提升就是:KB,MB,GB,TB,PB,EB,ZB,YB,对于本系列档的涉及范围内,操作量级不会达到TB。
准备学习环境 见补充
作为入门,不必把硬件概念吃个全,直接从操作开始更合适。
我只有windows环境能用,所以我用今年新出的microsoft visual studio community 2026(后称VS2026),2026版比2022版默认推进了语言版本支持,以便于在后续测试先进版本特性时,免去了调整语言版本支持的过程。
其余系统的开发环境可问AI,我不清楚。
VS是免费的,可直接从官方找资源,避免第三方恶意捆绑。
下载流程是先得到下载器,下载器去获取真正的开发环境程序,获取完后还要进行语言配置,才能以指定语言启动环境。
以VS2026为例,会有这么一段
对于windows环境,选择如下;对于其他系统可问AI。
然后可以从installer启动,或从开发环境正式入口进:visual studio。
后续依次是创建新项目——C++空项目——配置新项目名——创建——
步骤见下
关于界面布局:首次使用时一定会与我的不一样,但我也并没有做多少DIY,这个后续说明。
注意大纲部分
解决方案:这个指为了解决一个抽象的设计集合,你建立了何种方法集合,
c test:项目名,注:编程里的项目具体到只解决一种设计,所以一个设计占一个项目。
源文件:后续很长一段时间,这个夹里放的就是程序文件,且仅程序文件。
其余夹暂不关注。
使用项目
右键项目——设为启动项目,快捷键a,设置后项目名会变为粗体字,这步很重要,不明确指定时新文件会新建到其他激活的启动项目。且具体运作哪个程序也依赖这个设置。
然后只需在源文件夹,右键——新建项
输入文件名并把默认的.cpp尾缀改为.c 确认即可
这是历史遗留问题,VS默认不对外呈现c文件选项,只能这么改。
如果什么时候忘改了,那只能说执行到C++文件不支持的特性时,等它自动error就知道了。
C++本身相当兼容C,但不要依赖这个故意用C++跑C。
至此准备阶段就算完成,后续再提及一点DIY和可选的性能优化。
C文件编译机制
C文件名由基本名和扩展名组成,常用扩展名有头文件.h,非头文件.c。基本名应保持在255个纯英字符内,或尽可能少的中文字符,但不推荐用中文。
现代编程常采用分文件编译策略,分散风险。对于C,有如下必要项:
- 目标文件:由人敲入的代码文件翻译而来,编译器负责翻译。
- 启动代码:程序与系统的接口,对于VS,这个过程是自动的。
- 库:简单理解为编程工具箱,预设功能集合。
- 可执行文件:程序成品。
在后台,编译器做的:
- 翻译敲入代码为目标文件。
- 链接器关联目标文件,库,启动代码,以联合作用。
- 转换所有内容为程序成品。
小设置
关于字体字号:
字体可通过:工具——选项——,然后直接在搜索框搜字体就能出现设置了,个人偏好是微软雅黑,默认那个太扎眼。
字号通过左或右Ctrl+滚轮就能调整。
热重载:
是一个对大型程序的运行时即改即看的支持,但起步阶段应用此设置会显著延迟编译,error回馈慢,只需在工具——选项——,搜索热重载,关掉.NET / C++热重载即可
这是VS2026默认启用的,老版可忽略。
新建文件后按F5可以空跑一下文件,不要在意出错,本步骤的目的是把debug窗提出来。
这时会很明显的提示你缺少………………(一长串提示),把那个窗按下述办法拉倒显眼位置即可
另外文件大纲在左也是个人DIY的,默认应该是右侧,看个人习惯。
逻辑构思启发
在此不涉及代码组织,只是像解决问题一样,安排你的思考步骤即可。
举例:汉诺塔。
每次只能移动一块;
不可以取一摞,移动范围限制在三个棍中,不可以扔到设施外,大块不能压到小块上;
在此规则下,整个塔维持层级不变,但换一根棍的步骤是什么?
- 绿块串左棍;
- 黄块串右棍;
- 绿块串右棍;
- 红块串左棍;
- 绿块串中棍;
- 黄块串左棍;
- 绿块串左棍;
以上步骤可以视为是程序设计的抽象过程,落到具象上还有很多细节待考虑。不过目前能把这个操作想通并实现通,其实就具备了入门能力。
可以多找些真实事物,研究其实现过程,如九连环(一种益智玩具),或扑克的猜数游戏设计,麻将的成对消除游戏设计,这些在物理上本就很好实现,也利于初步探究程序的逻辑设计思路。
以九连环为例,它是个基于逻辑门和拓扑原理的玩具,要把每个环反复的切换挂上(真)与卸掉(假)的状态,逐渐的使后方环卸下,直到全部脱离。
可自行尝试,我在此不透露太多。主动完成一个推理过程有助于发散思维到其他方面。
尝试做一个注释
最原始的C89 C90注释方式,是用/*和*/包夹内容,可跨行。
C99开始支持用//设单行注释,但也可搭配\符号做强制换行,强制换行时,\必须打在新行首或既有行尾,但为了视觉上统一,建议打在行尾以明示“我要切行,太长了”,这样也能与后续用到代码里的习惯相匹配。
坑点:\切行具有严格的行尾判定,不要在\后闲着没事打空格,缩进,会出error。
由于“这样是接不上的”属无效语句段,导致了下方红线报错,所以注释不是随意的。
逻辑上,\做了把下一行注释拉到//所处行的功能,\的多切实际是一个逻辑行,但物理上,你的操作上,这就是直观的切行。行首可\的前提是上一行的\已经替这行先行分隔了,所以新行首的\本质是个无用标。
\后续有它的特别用处,到了再说。但目前为止,你在注释里打的任何字符,只要合理搭配\,原则上允许任何内容,因为注释的目的就是充分概述某语句段。
补充 重要
做此文档系列的目的是给初入者打通一个C——C++学习通路。
在我写了过半的文档后我发现一件事,如果仍以原资料通篇叙述的讲法,没什么用,还会耽误转型认知。
我收回上述应用.c文件的建议,并默认以.cpp文件为准,进行后续探索。这样本身也合理,C语言的新标准已经扔了 / 弃用很多早期力大砖飞的设计。
再次提示,本人做这系列的初衷是为一窍不通的外行打通进入这个方向的链路,这也算是我的个人经历记录,以后还会出C++,C#……全系列。如果您执意使用.c学习,可能遇到无法通过编译的硬性阻碍。