新闻中心
你的位置:万博manbext网页版登录(中国)官方网站入口 > 新闻中心 >绪言:对于编程讲义的吐槽:学编程要先学C,学C要先懂编程市面上C话语教程的编排王人很垃圾,完全莫得逻辑,无脑摆列细节。包括C话语之父 Dennis Ritchie 的那本《C关节联想话语》。大略说这本即是罪魁首恶?《C关节联想话语》即是一册C话语秉性先容手册,明显是给"初学C话语的编程东谈主员"联想的,而不是为编程初学者联想的。这书的存在自己没问题, 问题在于是它之后所有的编程讲义(不限于C话语)王人只会按着这么的编排限定去堆砌细节,莫得一个合理的干线逻辑. 像《C Primer Plus》这些流行讲义更是加重了这种趋势,实质上仅仅一些更厚更啰嗦的字典结果。国内的那些垃圾就更不必提了!于是, C话语算作一门流行的编程初学话语, 果然使得“学编程要先学C,学C要先懂编程” 这个 bug 流传于今。以下是我为措置这个 bug 作念的尝试。我肯定看了这篇恢复不错消解初学者们大部分狐疑,包括本题主的狐疑。(天然还有第二种决策,那即是先去学 Python 。Python 是果然的 0 基础编程话语,莫得上述 Bug. 然而用 Python 初学之后, 照旧淡薄总结学学 C, 学编程是绕不开C话语的。)第一课:#include 与 模块化编程一个关节就像一台机器,是多个功能模块组合而成的。各模块组合起来后靠一个主体关节( 平淡叫作念 main )去聚拢调节。例如一台轻便的C话语玩物车写法如下:1.0版玩物车.cvoid 前进(int 距离){/*具体竣事*/}
张开剩余91%void 后退(int 距离){/*具体竣事*/}
void 左转(int 角度){/*具体竣事*/}
void 右转(int 角度){/*具体竣事*/}
int main(){
for (int i=0; i<4; i++) //轮回(4)次
{
前进(10);
右转(90);
}
return 0;
}不错不雅察到,关节由四个支持功能块:前进,后退,左转,右转,和一个主体功能 main 组成。主体通过某种经由去调用了4个功能中的2个,竣事了让小车走一个 10×10 正方形回到原地的功能。不错看到,我并莫得 #include <stdio.h>,然而关节是完全正确的,不作任何修改就不错编译运行(面前莫得任何运行截止,因为所有功能函数王人是空的)。2.0版引入 #include 后,不错进一步优化咱们的代码结构。咱们不错把 main 上方的那一大块同类的内容打包起来写在另一个文献里(比如 "遥控器.h"),然后把它与原来的 "玩物车.c" 文献放在归拢目次下,如下所示:遥控器.hvoid 前进(int 距离){/*具体竣事*/}
void 后退(int 距离){/*具体竣事*/}
void 左转(int 角度){/*具体竣事*/}
void 右转(int 角度){/*具体竣事*/}玩物车.c#include "遥控器.h"
int main()
{
for (int i=0; i<4; i++) //轮回(4)次
{
前进(10);
右转(90);
}
return 0;
}玩物车.c 里面有了 #include "遥控器.h" 这句话,编译用具就会在编译过程中自动把 "遥控器.h" 里的内容复制到 "玩物车.c" 中 #include 语句所在的位置。这么一来,从机器的角度,2.0版关节和1.0版完全等价,不会出错;从东谈主的角度,咱们把一组联系的功能算作一个模块打包分离出去了。而 #include 就像是一个拼装号召,帮咱们把模块拼装总结。于是咱们不错用模块念念想去联想小车的各个组成部分,在不同的文献里写不同的模块,一次只需专注一个部分,写完再拼装起来。从此写关节即是造积木和搭积木的游戏!从坐褥的角度,咱们不错把大问题拆解成一些子模块,不错交给不同的东谈主远隔去措置,临了用 #include 组合起来,竣事单插手协作。好了,到这里你应该也曾阐明是否需要 #include 了, 其实就看你是否需要某个功能模块。stdio.h 是一个看重向电脑屏幕输入/输出信息的模块,非通常用,是以初学者简直莫得不需要的。有些模块即是这么, 很常用, 写起来又很祸患,是以C话语爱戴者们也曾写好一套常用用具,包含 stdio.h 、stdlib.h、math.h 等等十多个模块,各有各的用途,称为“C话语范例库”;它们也曾深度内置到编译用具包里了。#include "遥控器.h" 这个语句里,双引号里其实不是模块名, 而是模块的文献旅途, 因为相沿相对旅途, 是以同目次下的模块只需写文献名即可。 其它地点的模块不错用绝对旅途引入, 类似这么: #include "C:/Users/WHO/Downloads/模块.h"范例库的旅途编译器是坚毅的, 独一用尖括号 <> 标明一个模块属于范例库, 编译器就能找到它. #include <stdio.h>3.0版printf() 即是来自 stdio.h 的一个功能,不错用它在号召行窗口打出翰墨。让咱们把它加进小车里,让小车学会向你及时回报运业绩态吧。遥控器.h#include <stdio.h>
void 前进(int 距离){ printf("前进 %d 米\n",距离); }
void 后退(int 距离){ printf("后退 %d 米\n",距离); }
void 左转(int 角度){ printf("左转 %d 度\n",角度); }
void 右转(int 角度){ printf("前进 %d 度\n",角度); }玩物车.c#include "遥控器.h"
int main()
{
printf("启航\n");
for (int i=0; i<4; i++) //轮回(4)次
{
前进(10);
右转(90);
}
printf("收尾\n");
return 0;
mou.lmlp.com.cn
www.lmlp.com.cn
mau.kjkg.com.cn
mou.1k1k.com.cn
my.fbqb.com.cn
}不错看到遥控器需要使用 printf(),是以咱们把 #include<stdio.h> 包含到遥控器头部。而玩物车又 #include 了遥控器,于是层层包含最终采集到 玩物车.c 中,是以面前也不错在玩物车里使用 printf()。(能迤逦包含是C/C++话语的特色, 其它话语情况可能不相通, 比如 Python 的 import )去编译碰庆幸遵守吧!(编译教程会在第〇课更新)第〇课:设立编译环境,号召行基础,带参数的 Hello World1. 号召行基础告诉你2个秘要: 秘要1.号召行才是无数软件真实的样貌. 日常所见的多样图形界面软件只不外是荫藏了号召行窗口结果.淌若你想初学编程的话, 就要毁灭以电脑桌面为中心的视角, 从面前开动, 把号召行界面看作你的家, 其它的一切王人是从这里开放的.在 Windows 中, 按 WIN+S 搜索 "CMD" 大略 "Powershell" 大略 "结尾", 王人可开放号召行环境.秘要2.软件自己是莫得"装置"这个意见的. 软件放在哪个目次无所谓, 是纯靠文献旅途来定位和运行的. 比如你想开放文献料理器, 范例作念法是在号召行中输入齐备旅途 C:\Windows\explorer.exe 然后回车即可. 任何文献王人是这个逻辑, 你不错试试这么开放一个已有的 txt 文献.然而对于一些需要往往开放的文献,每次王人要输入齐备旅途的话就很祸患, 有莫得更浅易的作念法呢? 有的, 那即是"PATH环境变量".什么是"PATH环境变量"?PATH 是一个常用目次汇总表, 用来存放一些软件所在目次; 当一个软件的目次添加进此列表后, 便可概略齐备旅途, 只需敲出文献名即可运行; 对于一个号召行软件, 添加进了 PATH 就等于"装置"了这个软件.开放环境变量裁剪器即可发现, C:\Windows 也曾在列表中了:这即是为什么径直输 explorer.exe 也能开放文献料理器。又因为 exe 是二进制文献, 属于系统的最基本的文献, 是以不错概略后缀名, 径直输 explorer 也能开放文献料理器.这时也曾没东谈主能看出来它底本是一个文献了, 它成为了一个号召.这即是多样号召的真面容, 简直每个号召王人能在某个旅途下找到对应的二进制文献.号召行软件的典型用法:软件名+参数+参数...,以 aria2,ffmpeg 为例......C话语的编译器 GCC 亦然一个号召行软件.2. 设立C/C++编译环境在Windows上装置GCC编译器看望下载 x86_64-13.1.0-release-win32-seh-ucrt.7z解压得 mingw64,放到顺应的地点(保举C盘根目次)把 C:/mingw64/bin 添加到 PATH 环境变量:win10如何添加环境变量path- 奉行 gcc -v 望望反映, 莫得报错证实装置得手.3. 编译运行你的第一个关节开放号召行, 运行 notepad hello.c (这么就新建了文本文献 hello.c)粘贴如下内容并保存:#include <stdio.h>
int main(int argc, char *argv[])
{
printf("你好,我是关节 %s\n", argv[0]);
if (argc > 1)
{
printf("太好了,有东谈主来了!\n");
}
else
{
printf("怎样一个东谈主王人莫得?\n");
}
for (int i = 1; i < argc; i++)
{
printf("迎接你,%s!\n", argv[i]);
}
return 0;
}回到号召行窗口, 奉行:gcc *.c -o hello号召解说: 调用 gcc 编译器, 并传入了这三个参数: "*.c", "-o", "hello".*.c 示意选拔面前目次下所有 .c 文献 ( 天然, 本例中你不错写 hello.c )-o 示意输出hello 示意会输出文献名为 hello ( 在 Windows 环境下生成的是 hello.exe )得手后,hello.c的归拢目次下会生成 hello.exe 文献运行:无参数运行:./hello有参数运行:./hello Tom Jerry淌若出现乱码, 可能是因为文本默许使用了 UTF-8 编码,不错试试把文本另存为 GBK 编码从头编译. 大略不改文本编码,径直用底下这个更绝对的法子.*4. 把 Windows 切换到 UTF-8 花式,祛除一切中语乱码风光win10 设立系统默许utf-8编码这么成立完以后,你的代码文献夹旅途,文献名,变量名,函数名王人不错包含中翰墨符,料理代码时不消再小心翼翼的了。这么作念也有短处,即是一些使用 GBK 编码的老软件/老游戏/老文献可能会出现乱码. 固然这些老软件大部分也曾淘汰了, 然而照旧看个情面况自行选拔吧。第二课:函数和变量,通用关节模子函数是什么?函数是最小的关节单元,是关节的细胞。是以函数的基本运行逻辑和关节完全一致:输入数据->处理数据->输出截止。上文中咱们直不雅体会了函数的功能,仔细不雅察不错发现所有函数的王人使用归拢个样式:某种标识 函数名 (输入数据) { 语句 }其实所有这个词关节即是一个大函数: int main( ) { }其中开始的标识是在指明函数最终的接洽截止是什么, int 示意最终获取一个整数, void 示意不给出任何截止 (这是不错的, 好多函数只需要寡言作念事情就行, 而不必回报截止).不雅察 main 函数可看出,语句之间用英文分号离隔, 语句之间不错换行, 函数中不错调用其它函数...等等.变量是什么?变量,是数据的搬运工。第三课:结构体,类结构体是什么?...类是什么?函数竣事了操作的模块化;结构体竣事了数据的模块化,类 = 结构体 + 函数;(C++内容)是以类竣事了调解的模块化。是以 "面向对象" 不是什么高妙的东西,它即是 "模块化念念想" 的径直截止。竣事模块的无序组合的法子:声明与界说分离C话语中,当你需要创建一个新的函数供其它函数使用时,需要提神它摆放的限定。因为C代码是从上到下限定认识的。是以一个函数不可调用在它底下出现的函数。void A()
{
B();
}
void B()
{
A();
}例如上述代码中 函数 A 试图使用函数 B,但在C话语中这是无法作念到的,因为这一转之前莫得出现过B的界说,是以A并不知谈B的存在. 而 B 调用 A 则是不错的.函数的依赖往往是树状的,破耗一些力气不错整理出合理的限定. 然而网状的依赖则很难通过调节限定作念到,并且靠近成百上千个函数, 没东谈主想在这些烦东谈主的细节上糜费元气心灵。为了竣事模块的无序组合,C话语搞出了一套法子,叫作念声明与界说分离。使得模块只消声明了名字就不错招呼了,模块里面的具体内容不错背面补上。比如上头例子,不错改成://此代码仅用于例如, 请勿实机运行, 会酿成死轮回
//声明
void A();
void B();
//界说
void A(){ B() }
void B(){ A() }这么一来, 无论有若干函数 ,独一它存在于声明区, 就不错粗率彼此调用, 不消商量限定. 知谈这个动机以后,不消学就不错知谈,结构体和类也一定存在类似的联想。学C++面向对象时的时刻,所谓虚函数亦然声明与界说分离的一种控制。本文的一个中枢不雅点即是:先有需求,再有法子。需求出现之前万博manbext网页版登录app娱乐,任何常识王人是毋庸常识,任何用具王人是废料。只传授常识, 不证实动机的憨厚充足是分歧格的憨厚.你之是以需要一个关节,其实是需要它替代你作念一些致力于而无脑的事情。典型的例子即是把一件事肖似N遍, 是以你需要轮回。
发布于:四川省下一篇:万博manbext网页版登录app(中国)官方网站从而兑现更高档的元编程功能-万博manbext网页版登录(中国)官方网站入口
- 2026/06/04万博manbext网页版登录app(中国)官方网站从而兑现更高档的元编程功能-万博manbext网页
- 2026/06/04万博manbext网页版登录app娱乐#include "遥控器.h" 这个语句里-万博manbex
- 2026/06/04万博manbext网页版登录app娱乐中枢原则:选拔与RX 560性能匹配的中端贬责器-万博manb
- 2026/06/03万博manbext网页版登录app娱乐并通过全场地的定量和定性分析表率-万博manbext网页版登录
- 2026/06/03万博manbext网页版登录app官网对投资者存在流动性风险-万博manbext网页版登录(中国)官

