《“笨办法” 学C语言(Learn C The Hard Way)》

本文讲述了作者如何在Windows Subsystem for Linux 2(WSL2)环境下搭建C开发环境,包括安装WSL2、Ubuntu、Vim编辑器,设置国内镜像源,配置C编译环境,以及解决隐式函数声明等问题。作者强调了良好的编程习惯和理解计算机基础的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导言:C的笛卡尔之梦


准备工作

(一)WSL2

C源自unix,所以在unix平台中开发中较为友好。
在这里插入图片描述
windows 操作系统主要是用C++开发的,虽然自研的NT内核用到少量的C,但是在windows系统中C语言使用的库、函数和工具都和其它的C语言环境有些差异,所以windows作为C的开发环境显然不是明智之举。

好在2022年了,windos不仅自带了WSA安卓子系统,linux子系统WSL也早就安排上了。这使得我不要折腾我的树莓派或者是阿里云的ubuntu就可以用上linux的开发环境了。通过参考下面的教程我选择了WLS的第二版WSL2,发型版本是微软商店的Ubuntu 20.04.4 LTS。打开下载好的应用,创建了新的用户jesse,
sudo passwd 设置了root密码,
关闭窗口发现unbuntu已经自动添加到win11的Windows Terminal里面了。
请添加图片描述

(二)Vim的使用

代码编辑器我就选择程序员都爱的vim吧,ubuntu里面自带了,
关与vim的使用,vim 一共有三种模式
在这里插入图片描述

具体的命令如下
在这里插入图片描述

  • List item

(三)为ubuntu添加镜像源

添加国内镜像源,下面的代码是我运行的,需要会一点vim,我记得我第一次使用vim不会退出,直接抓狂。

sudo apt install gedit 
sudo vim /etc/apt/sources.list
########################################
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb http

####################################################################

s://mirrors.ustc.edu.cn/ubuntu/ impish main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ impish main restricted universe multiverse
 
deb https://mirrors.ustc.edu.cn/ubuntu/ impish-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ impish-updates main restricted universe multiverse
 
deb https://mirrors.ustc.edu.cn/ubuntu/ impish-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ impish-backports main restricted universe multiverse
 
deb https://mirrors.ustc.edu.cn/ubuntu/ impish-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ impish-security main restricted universe multiverse
 
deb https://mirrors.ustc.edu.cn/ubuntu/ impish-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ impish-proposed main restricted universe multiverse

# 清华镜像源

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish main restricted universe multiverse
 
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-updates main restricted universe multiverse
 
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-backports main restricted universe multiverse
 
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-security main restricted universe multiverse
 
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-proposed main restricted universe multiverse
 
# 阿里镜像源
 
deb http://mirrors.aliyun.com/ubuntu/ impish main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ impish main restricted universe multiverse
 
deb http://mirrors.aliyun.com/ubuntu/ impish-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ impish-security main restricted universe multiverse
 
deb http://mirrors.aliyun.com/ubuntu/ impish-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ impish-updates main restricted universe multiverse
 
deb http://mirrors.aliyun.com/ubuntu/ impish-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ impish-proposed main restricted universe multiverse
 
deb http://mirrors.aliyun.com/ubuntu/ impish-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ impish-backports main restricted universe multiverse
 
# 163镜像源

deb http://mirrors.163.com/ubuntu/ impish main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ impish main restricted universe multiverse
 
deb http://mirrors.163.com/ubuntu/ impish-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ impish-security main restricted universe multiverse
 
deb http://mirrors.163.com/ubuntu/ impish-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ impish-updates main restricted universe multiverse
 
deb http://mirrors.163.com/ubuntu/ impish-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ impish-proposed main restricted universe multiverse
 
deb http://mirrors.163.com/ubuntu/ impish-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ impish-backports main restricted universe multiverse
注:系统代码更改为当前系统代码

————————————————
版权声明:本文为CSDN博主「ETON2」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ETON2/article/details/123529070

##########################################
sudo apt-get update
sudo apt-get upgrade

(四)安装环境以来

sudo apt-get install build-essential

这一步是安装C/C++编译环境。Ubuntu缺省情况下,并没有提供C/C++的编译环境,因此还需要手动安装。但是如果单独安装gcc以及g++比较麻烦,幸运的是,Ubuntu提供了一个build-essential软件包。类似windows系统下面的MinGW。可以使用

 apt-cache depends build-essential

查看这些依赖具体是什么

(五)一些要求

编程态度

  • 写C代码时的意识状态:时刻想着尽可能预防错误的发生,并且会带着凡事皆不会顺利的想法。
  • 解决方案就是强迫自己慢下来,更加细致地去读写代码,一开始你也许会觉得很痛苦、很烦躁,那就增加自己休息的频率,最后你会觉得这其实也很容易做到。
  • C语言要求你完全聚精会神。
  • (调试)在证明正确之前,要先假设一切都可能是错的。
  • 如果你一直用“乱改直到能用”的方法写代码,到头来就是什么都不能用了。
  • C语言对你要求比较高,因为它要求你先计划好要创建的东西。

(六)拓展阅读计算机相关

了解计算机的启动过程和主引导扇区,让你的计算机从这里起飞吧

计算机简历

Unix操作系统 - 历史回忆录

【计算机博物志】PC操作系统40年:潮起与潮落

从0到1设计一台计算机


一、启用编译器

(一)创建文件

linux下面,万物皆文件,所以基本上要遵循4个命名规则,我在/home/jesse/目录下创建一个cPprogram文件夹

cd /home/jesse/
mkdir cPprogram
cd cPprogram
vim ex1.c #创建一个文件

在这里插入图片描述
按下esc后输入:wqb保存退出在这里插入图片描述
马德报错了!但是我继续执行

./ex1

是有正常输出的,
请添加图片描述

(二)处理隐式声明函数bug

回头看了一下那个警告, implicit是隐式的,内含的, implicit declaration of function 则是隐式声明函数,
通过查阅资料,后明白了是怎么回事儿,然后参看一下教程发现教程里面也提到了,

#include <stdio.h>

把这行代码加到开头则可以完美执行了。
在这里插入图片描述

警告:隐式声明函数‘xxx’
implicit declaration of function 警告warning的原因及解决
该死的c语言的隐式函数声明法则

(三)附加题

1.删掉某一行
2.多打印5行文本
3.执行man 3 puts来阅读这个函数和其它函数的文档

二、用Make来代替Python

(一)编译的过程

区别于我们在数字电路中学过的硬件描述语言,程序设计语言是为了跟好的利用CPU来实行计算功能。

请添加图片描述

练习4:Valgrind 介绍
练习5:一个C程序的结构
练习6:变量类型
练习7:更多变量和一些算术
练习8:大小和数组
练习9:数组和字符串
练习10:字符串数组和循环
练习11:While循环和布尔表达式
练习12:If,Else If,Else
练习13:Switch语句
练习14:编写并使用函数
练习15:指针,可怕的指针
练习16:结构体和指向它们的指针
练习17:堆和栈的内存分配
练习18:函数指针
练习19:一个简单的对象系统
练习20:Zed的强大的调试宏
练习21:高级数据类型和控制结构
练习22:栈、作用域和全局
练习23:认识达夫设备
练习24:输入输出和文件
练习25:变参函数
练习26:编写第一个真正的程序
练习27:创造性和防御性编程
练习28:Makefile 进阶
练习29:库和链接
练习30:自动化测试
练习31:代码调试
练习32:双向链表
练习33:链表算法
练习34:动态数组
练习35:排序和搜索
练习36:更安全的字符串
练习37:哈希表
练习38:哈希算法
练习39:字符串算法
练习40:二叉搜索树
练习41:将 Cachegrind 和 Callgrind 用于性能调优
练习42:栈和队列
练习43:一个简单的统计引擎
练习44:环形缓冲区
练习45:一个简单的TCP/IP客户端
练习46:三叉搜索树
练习47:一个快速的URL路由
后记:“解构 K&R C” 已死

修改记录:

2022.4.20建立表格开始记录
2022.4.232用make file 代替python
2022.4.232用make file 代替python
2022.4.232用make file 代替python
日期记录
2022.4.20建立表格开始记录
手机练习2
练习3

参考书籍:

笨办法学C 中文版

这本书的目标是让读者掌握足够的C语言技能,从而可以自己用C语言编写程序或者修改别人的C语言代码,成为一名的程序员。但这并不完全是一本讲C语言编程的书,书中还重点介绍防御性编程。本书以习题的方式引导读者一步一步习编程,结构非常简单,共包括52个习题,每一个习题都重点讲解一个重要的主题,多数是以代码开始,然后解释代码的编写,再运行并测试程序,给出附加任务。此外,每个习题都配套教视频。 本书是写给过编程语言的读者的,本书有趣、简单,并且讲解方法独特,让读者了解众多C语言的基础知识和C程序中常见的缺陷,在慢慢增强自己的技术能力的同时,深入了解怎样破坏程序,以及怎样让代码更安全。 本书会随书附赠5个多小时充满激情的视频,这是一套完整的C语言视频课程! 作者Zed A.Shaw为急于自我提高编程技能(不限语言)的C语言者构建了一套课程,只要跟着,你会像迄今为止Zed教过的数百万程序员一样获得成功!只要你能自律、投入和坚持! 本书内容十分浅显易读,只要花2天到1周可以读完,读完后既可以获得几千行代码的C编程经验。本书会让你的每一分钟投入都有回报。你很快能会世界上强大的编程语言之一,成为一名C程序员。 在本书中,你将通过完成52个精心设计的习题来会C语言。阅读书里的习题,看作者提供的视频,照着录入代码(不要复制和粘贴!),修正自己的错误,观察程序的运行。在这个过程中,你将会了解好的现代C代码长什么样子,如何有效地思考代码,如何更加有效地找出和修正错误。重要地是,你将掌握严密的防御性编程技术,不管你使用什么编程语言,利用这些技术你都可以创建避免缺陷并抵御恶意行为的软件。本书通过实用的项目,让你以致用,从而对自己新会的技能更有信心。Zed将教会你编写出色的C代码所需具备的诸多关键技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值