0、前言:
- 这部分知识是对C\C++\python对比_概览(1)中比较重要的部分实操验证
- 这部分实践,就是要搞清楚这三种语言,每一种语言是如何在windows64位平台上面进行项目开发的,搞清楚开发环境和开发流程,所以每个案例功能上都相对简单,下一篇再总结在linux环境中开发的方法。
1、windows+vscode环境下,配置C和C++编译器、python解释器实测:
1.1、配置C和C++编译器实操
- 1、安装 MinGW-w64 编译器:下载 MinGW-w64(GCC Windows 版),解压到无中文、无空格的路径(如 D:\MinGW-w64\bin),复制 bin 目录完整路径,添加到系统环境变量 Path,打开 CMD 测试(出现版本号即成功)。
- 2、配置 VS Code:安装 VS Code,安装扩展:C/C++ (Microsoft)
- 3、CMake 工具(可选,大型项目必备):MinGW 可能自带 cmake,CMD 输入 cmake --version 检查,若无,则单独安装 CMake,并将其 bin 目录加入环境变量。
- 4、C/C++ 项目编译方式:如果是练习、算法、小工具用gcc main.c -o main或者g++ main.cpp -o main直接编译,大型项目用cmake编译管理。
1.2、配置python解释器实操
- 装 Python操作方法:
- 访问 Python 官方网站,下载对应系统(Windows/Mac/Linux)的安装包;安装时务必勾选「Add Python to PATH」(添加环境变量,避免后续无法在终端调用);安装完成后,打开系统终端,输入
python --version(Windows)或python3 --version(Mac/Linux),能正常显示版本号即安装成功。
- 装 VSCode 插件
- 操作方法:打开 VSCode,点击左侧「扩展」图标(或按 Ctrl+Shift+X),在搜索框输入「Python」,找到微软官方发布的「Python」插件(图标为蓝色蟒蛇,作者是 Microsoft),点击「安装」;安装完成后,重启 VSCode 使插件生效。
- 用命令或图形化建虚拟环境操作方法(两种方式二选一,均在 VSCode 内操作):
- 图形化(新手推荐):按 Ctrl+Shift+P 调出命令面板,输入「Python: Create Environment」,回车后选择「Venv」,再选择已安装的 Python 解释器,等待片刻即可自动创建虚拟环境(默认命名为 .venv)。
- 命令行(通用):打开 VSCode 底部「终端」,输入命令
python -m venv .venv(Windows)或python3 -m venv .venv(Mac/Linux),回车执行;创建完成后,Windows 输入.venv\Scripts\activate、Mac/Linux 输入source .venv/bin/activate,终端前出现「(.venv)」即激活成功。
- 在 VSCode 里选中这个虚拟环境作为解释器操作方法:
- 按 Ctrl+Shift+P 调出命令面板,输入「Python: Select Interpreter」,回车后在弹出的列表中,选择带有「.venv」字样的 Python 解释器(路径通常是 .venv\Scripts\python.exe 或 .venv/bin/python);选中后,VSCode 右下角会显示「Python 3.x.x (.venv)」,即配置成功。
- 说明:如果不选择虚拟环境作为解释器,在终端中直接输入python main.py也可以运行你的程序,但是VSCode 不知道你用的是哪个 Python 环境,代码里导入自定义类(如 from student import Student)、导入第三方库(如 requests),会出现 红色波浪线报错(明明能运行,却提示 “找不到模块”);没有智能补全、语法提示(比如打 stu. 不会自动弹出 add_score() 方法),写代码全靠记,容易出错;无法快速跳转到类、方法的定义。
- 正常开发、运行、调试操作方法:
- 开发:新建 .py 文件(右键项目文件夹 → 新建文件 → 命名为 xxx.py),编写代码。
- 运行:打开要运行的 .py 文件,点击右上角「运行」按钮(三角图标),或右键 → 「在终端运行 Python 文件」,运行结果会在终端显示。
- 调试:点击左侧「调试」图标(虫子图标),点击「创建 launch.json 文件」,选择「Python」→「当前文件」,生成调试配置后,点击「启动调试」(绿色三角),即可断点调试、逐步运行代码。
1.3、VScode开发指南
- 如果是开发一些涉及系统接口的程序,打开VScode的时候就要用管理员权限打开。
- VScode中为了方便开发,把其中的终端修改了,看似cmd终端或者power shell终端,但是里面还是可以运行一些批处理指令,比如ls本来在cmd和power shell中是没有的,但是VScode做了优化,映射了这些指令。
2、用C开发一个windows下的简单项目:
- 要求用CMake在vscode中开发,能够较全面的涉及C中的语法知识
2.1、【知识补充】
2.1.1、首先回顾C语言开发的项目中“多文件结构”
- 用如下图所示项目结构做说明:
- 【协作关系说明】a.h是a.c的功能声明说明书,头文件的核心作用是统一接口、避免重复声明、简化多文件协作,且必须添加#ifndef防护。a.c实现a.h声明的功能且需包含a.h在编译阶段做校验,main.c作为程序入口,通过包含a.h调用a.c的功能。
- 【a.c 中 #include “a.h” 的核心作用】a.c包含a.h可让编译器在编译阶段校验声明与实现的一致性,避免链接阶段出现模糊难定位的错误。编译 a.c 时,编译器会先把 a.h 的内容 “粘贴” 到 a.c 开头,此时声明(a.h)和实现(a.c)处于同一编译单元,编译器能直接对比两者的函数名、参数类型、返回值是否一致,不一致则立即报错。补充下一个问题,函数签名(signature)由函数名、参数的类型、个数、顺序、顶层const构成,仅用于重载决议(编译器挑选重载函数),C++标准规定返回值不属于签名,因此不能依靠返回值区分重载。函数原型(prototype,也就是头文件里的完整声明) = 返回值类型 + 函数签名。声明之所以必须带上返回值,是因为原型的作用是编译期全局类型校验。
- 【头文件重复包含的问题】在同一个文件中,其他文件的头文件声明可重复、定义不可重复,#ifndef防护的核心作用是防止头文件被同一个文件多次包含,避免不可重复内容报错。可以理解为如果你的头文件中只有声明,没有定义,就可以不用加#ifndef,但是纯声明可重复,多次包含不会报错,但会增加编译时间,一般都是习惯加#ifndfef。
- 【关于 main.h 的说明】main.h非C语言项目标配,仅当main.c有内容需暴露给其他文件时才需要创建。
2.1.2、Cmake
- Cmake根据 CMakeLists.txt,生成 make 能看懂的makefile,它是跨平台的,Windows、Linux、Mac 都能用。
- CMakeLists.txt 用的是 CMake 专属的 “领域特定语言(DSL)” —— 这种语言是专门为 “定义项目构建规则” 设计的,只用于描述 “怎么编译、链接、生成程序”,不能写业务逻辑(比如循环、判断也只是为构建服务)。
- DSL(domain specific language)特点:
- 语法极简,像写声明一样,不用关系其他的,重点是要告诉CMake要做什么;
- 跨平台适配:同一份CMakeList.txt,CMake在windows下会转换为Makefile,linux下会转换为make脚本。
- 大小写不敏感,但是一般习惯是指令小写,内置变量大写。
2.2、项目开发:
2.2.1、项目简介:
- 做一个多文件项目,实现功能:输入两个数字,计算加法、乘法(分模块编写)。
- 项目结构:
my_c_project/ # 项目根文件夹
├── src/ # 源代码文件夹
│ ├── main.c # 主程序
│ ├── math_utils.c # 功能函数
│ └── math_utils.h # 头文件
├── CMakeLists.txt # CMake 配置文件(核心!)
└── build/ # 编译输出文件夹(手动新建)
2.2.2、项目环境检测
- 环境检测:
- 环境中依赖项之间的关系:
电脑
├── MinGW-w64 (一个工具包)
│ ├── gcc.exe → 编译 C 代码
│ └── mingw32-make.exe → 执行 Makefile,指挥 gcc
│
└── CMake (另一个独立工具)
└── cmake.exe → 读取 CMakeLists.txt,生成 Makefile - 要验证有没有gcc、和mingw32-make、cmake即可,其中gcc是C语言编译器,mingw32-make是构建工具,cmake是项目构建工具。
C:\Users\11252>gcc--versiongcc(x86_64-posix-seh-rev0, Built by MinGW-W64 project)8.1.0 Copyright(C)2018Free Software Foundation, Inc. This isfreesoftware;see thesourceforcopying conditions. There is NO warranty;not evenforMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. C:\Users\11252>mingw32-make--versionGNU Make4.2.1 Builtforx86_64-w64-mingw32 Copyright(C)1988-2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version3or later<http://gnu.org/licenses/gpl.html>This isfreesoftware: you arefreeto change and redistribute it. There is NO WARRANTY, to the extent permitted by law. C:\Users\11252>cmake--versioncmake version4.3.0 CMake suite maintained and supported by Kitware(kitware.com/cmake). - 环境中依赖项之间的关系:
2.2.3、写所有程序
- src/math_utils.h(头文件:声明函数)
#ifndefMATH_UTILS_H#defineMATH_UTILS_H// 加法函数声明intadd(inta,intb);// 乘法函数声明intmultiply(inta,intb);#endif- src/math_utils.c(功能实现)
#include"math_utils.h"// 加法实现intadd(inta,intb){returna+b;}// 乘法实现intmultiply(inta,intb){returna*b;}- src/main.c(主程序)
#include<stdio.h>#include"math_utils.h"intmain(){inta,b;printf("请输入第一个数字:");scanf("%d",&a);printf("请输入第二个数字:");scanf("%d",&b);// 调用我们写的函数intsum=add(a,b);intmul=multiply(a,b);printf("加法结果:%d\n",sum);printf("乘法结果:%d\n",mul);return0;}2.2.4、写构建规则(CMakeLists.txt)
- CMakeLists.txt 的作用 = 告诉编译器:要编译哪些 .c 文件,写CMakeLists.txt:
# 要求的 CMake 最低版本cmake_minimum_required(VERSION3.10)# 项目名称project(MyCProject C)# 设置 C 语言标准set(CMAKE_C_STANDARD99)set(CMAKE_C_STANDARD_REQUIRED ON)# 告诉编译器:头文件在哪里include_directories(src)# 生成可执行文件 # 格式:add_executable(可执行文件名 所有源文件)add_executable(MyCApp src/main.c src/math_utils.c)2.2.5、生成makefile文件,进而生成可执行文件
- 通过指令:cmake … -G “MinGW Makefiles”
cmake → 调用 CMake 工具(你安装的那个)
… → 告诉 CMake:去上一级文件夹找 CMakeLists.txt,因为CMakeLists.txt中写了src,只能写在src同一级别目录中,才能找到src。
-G “MinGW Makefiles”
→ 明确告诉它:给 MinGW 编译器生成 Makefile - 然后就可以看到build中有了MakeFile文件。然后在MakeFile所在文件夹下执行:mingw32-make,生成可执行文件。
2.2.6、运行测试:
2.2.7、说明:
- CMakeList的位置不一定非得和src同一级目录,也可以放build中,但是CMakeList就要改一下,同时生成makefile的命令也要改一下:
# 要求的 CMake 最低版本cmake_minimum_required(VERSION3.10)# 项目名称project(MyCProject C)# 设置 C 语言标准set(CMAKE_C_STANDARD99)set(CMAKE_C_STANDARD_REQUIRED ON)# 告诉编译器:头文件在哪里include_directories(../src)# 生成可执行文件 # 格式:add_executable(可执行文件名 所有源文件)add_executable(MyCApp../src/main.c../src/math_utils.c)
3、用C++开发一个windows下的简单项目:
- 要求用CMake在vscode中开发,能够较全面的涉及C++中的语法知识
3.1、【知识补充】
3.1.1、C++ 项目多文件结构
- 和 C 语言几乎完全一样,只是文件后缀变成 .h / .hpp(头文件)和 .cpp(源文件)。
- 项目结构逻辑:
utils.h / calculator.h:功能声明(类、函数、宏)
utils.cpp / calculator.cpp:功能实现
main.cpp:程序入口
头文件必须加 #ifndef 或 #pragma once 防止重复包含
.cpp 必须包含自己的 .h,让编译器校验声明与实现一致
3.1.2、CMake(C++ 版)
- CMake 对 C 和 C++ 用法几乎一样,只需要改一点点配置:
- 指定语言为 CXX(C++)
- 设置 C++ 标准(如 C++11 / C++17)
- 其余逻辑:cmake → 生成 Makefile → mingw32-make → 生成 exe完全和 C 项目相同。
3.2、项目开发
3.2.1、项目简介
- 功能:输入两个数字,使用C++ 类、封装、成员函数实现 加法、乘法、判断大小、打印结果
- 用到 C++ 核心知识点:
- 类与对象
- 成员函数
- 封装
- 命名空间(可选)
- 输入输出流 cin/cout
- 多文件结构
- CMake 构建 C++ 项目
- 项目结构
my_cpp_project/ # 项目根
├── src/
│ ├── main.cpp # 入口
│ ├── Calculator.cpp # 类实现
│ └── Calculator.h # 类声明
├── CMakeLists.txt
└── build/ # 编译目录
3.2.2、项目环境检测
和c语言一样,确保三个工具都可以用
gcc--versiong++--versionmingw32-make--versioncmake--version
3.2.3、写所有程序
src\Calculator.cpp
#include"Calculator.h"// 加法实现intCalculator::add(inta,intb){returna+b;}// 乘法实现intCalculator::multiply(inta,intb){returna*b;}// 取最大值intCalculator::getMax(inta,intb){return(a>b)?a:b;}src\Calculator.h
#ifndefCALCULATOR_H#defineCALCULATOR_H// 计算器类classCalculator{public:// 成员函数声明intadd(inta,intb);intmultiply(inta,intb);intgetMax(inta,intb);};#endif- src\main.cpp
#include<iostream>#include<windows.h>// 加这个头文件#include"Calculator.h"usingnamespacestd;intmain(){// 加这行:强制控制台使用 UTF-8SetConsoleOutputCP(65001);inta,b;cout<<"请输入第一个数字:";cin>>a;cout<<"请输入第二个数字:";cin>>b;// 创建对象Calculator calc;// 调用成员函数intsum=calc.add(a,b);intmul=calc.multiply(a,b);intmax_val=calc.getMax(a,b);cout<<"------------------------"<<endl;cout<<"加法结果:"<<sum<<endl;cout<<"乘法结果:"<<mul<<endl;cout<<"较大值:"<<max_val<<endl;return0;}
3.2.4、写构建规则
CMakeLists.txt
cmake_minimum_required(VERSION3.10)# 项目:指定语言为 CXX (C++)project(MyCppProject CXX)# C++ 标准set(CMAKE_CXX_STANDARD11)set(CMAKE_CXX_STANDARD_REQUIRED ON)# 头文件路径include_directories(src)# 生成可执行文件add_executable(MyCppApp src/main.cpp src/Calculator.cpp)
3.2.5、生成makefile文件,进而生成可执行文件
4、用python开发一个windows下的简单项目:
- 要求用.venv虚拟环境在vscode中开发,能够较全面的涉及C++中的语法知识
4.1、【知识补充】
4.1.1、环境变量是什么?
- 环境变量,就是所有可以在终端执行的文件的文件路径
4.1.2、Python 虚拟环境是什么?
- python的虚拟环境:一个独立的 Python 解释器 + 一堆安装好的第三方库的文件夹。
- 比如 project1_venv 里有 Python 3.11 + pandas 1.5,project2_venv 里有 Python 3.9 + pandas 2.0,两者互不干扰。
4.1.3、在windows系统中使用jupyter的流程
- Jupyter 是一套开源的交互式计算工具,最常用的是 Jupyter Notebook(网页版编辑器),能在浏览器里写代码、跑代码、写笔记、画图表,把代码、结果、说明放在同一个 .ipynb 文件里。前端网页界面 + 后端内核(Kernel) 分离,支持 Python、R、Julia 等 40+ 语言。代码分段执行、即时看结果,混合 Markdown、公式、图片、可视化,适合数据分析、机器学习、教学、笔记。
- 安装 Jupyter(推荐在虚拟环境)流程:确保电脑上有python
- 创建一个虚拟环境来安装jupyter——激活这个虚拟环境——安装jupyter;
- 下载jupyter中文包:pip install jupyterlab-language-pack-zh-CN,然后在对应环境中输入jupyter notebook启动jupyter,最后在jupyter页面的setting中设置中文即可。
- 直接在本地环境安装jupyter;其他环境需要安装ipykernel(pip install ipykernel -i https://mirrors.aliyun.com/pypi/simple/),且需要运行指令:python -m ipykernel install --user --name=venv_projectA --display-name=“python_test_venv” 来注册jupyter内核。venv_projectA 是 Jupyter 识别内核的内部唯一标识名(系统级名称),而 python_test_venv是给你看的友好显示名—— 两者绑定,缺一不可。
- 在 jupyter 中查看jupyter内核,可以通过jupyter kernelspec list查看其中的内核,以及内核的位置,一般第一个内核就是安装jupyter的那个环境。
- jupyter中删除某个注册内核的方法:jupyter kernelspec remove venv_jupyter。
- jupyter的内核(kernel):Jupyter 与环境之间的通信通道,一个内核对应一个环境,注意安装jupyter的环境,和jupyter可以切换的内核环境没有关系,其他版本的环境中只要注册了jupyter,就可以在jupyter中切换内核。哪怕把 Jupyter 装在 Python 2.7 里(仅举例,不推荐),只要给 3.11 注册内核,Jupyter 照样能调用 3.11 运行代码。Jupyter 本体可以理解为一台遥控器(装在哪个抽屉 / 哪个房间无所谓),jupyter中的内核就是遥控器里的频道,每个频道对应一台电视(不同的环境);你用遥控器(Jupyter)换频道(切换内核),就能看不同电视(环境)里的内容(运行对应环境的代码)—— 遥控器在哪,不影响你换哪个频道。
- jupyter的使用:
- python可以转中文包,先在jupyter所在的环境中下载中文包(pip install jupyterlab-language-pack-zh-CN -i https://pypi.tuna.tsinghua.edu.cn/simple),然后刷新jupyter界面,在setting的language中选择中文即可。
- 启动:在终端输入jupyter notebook即可,进入网页后不要关闭终端;
- 新建文件:右上角的new;
- 日常写代码 + 做笔记 → 选 Notebook(最常用,.ipynb 文件,支持代码 + Markdown 混写)【√】
- 纯写 Python 脚本 → 选 Python File(.py 文件,和普通 Python 脚本一样)
- 临时跑命令 / 调试 → 选 Terminal(直接打开系统终端,执行 pip/git 等命令)
- 写纯文本 / 笔记 → 选 Markdown File(.md 文件,只写文档,不跑代码)
- 交互式命令行 → 选 Console(类似 Python 交互环境,逐行执行)
- 写代码运行:输入代码后,shift+enter运行,结果直接显示;
- 切换笔记模式:按ESC,按M切换Markdown,写文字之后,按shift+enter渲染
- 切换内核:顶部Kernel,change kernel,选择已经注册的环境内核
- 保存:Ctrl+s,文件就会保存在启动jupyter时候的文件夹
- 关闭jupyter:关闭浏览器——终端按ctrl+c停止关闭
- 快捷操作:运行(shift+enter)、插入单元格(a是向上插入/b是向下插入)、切回代码单元格(Esc+Y)、切到markdown(Esc+M)
4.2、VScode开发python项目
4.2.1、项目简介
- 通过自定义计算器类实现加减乘除运算,结合 Python 基础语法与第三方库实现数据格式化输出,完整练习类、对象、函数、模块库使用。
4.2.2、项目结构
4.2.3、项目程序
- calculator.py
# 计算器类classCalculator:def__init__(self):self.result=0defadd(self,a,b):self.result=a+breturnself.resultdefsub(self,a,b):self.result=a-breturnself.resultdefmul(self,a,b):self.result=a*breturnself.resultdefdiv(self,a,b):ifb==0:return"错误:除数不能为0"self.result=a/breturnself.result- main.py
fromcalculatorimportCalculatorfromtabulateimporttabulate# 第三方库# 基础语法print("=== Python 基础语法演示 ===")a=10b=3print(f"数字a={a}, 数字b={b}")# 使用类calc=Calculator()# 计算data=[["加法",calc.add(a,b)],["减法",calc.sub(a,b)],["乘法",calc.mul(a,b)],["除法",round(calc.div(a,b),2)]]# 使用第三方库表格输出print("\n=== 计算结果(使用tabulate库)===")print(tabulate(data,headers=["运算","结果"],tablefmt="grid"))4.2.4、项目运行结果
4.3、jupyter开发python项目
- jupyter适合用来做数据分析。
总结:
- C/C++:编译型语言源码 → 编译 → 链接 → 可执行文件,所以需要以下步骤:
- 需要在 VSCode 装插件(C/C++ 扩展)
- 本地要装编译器工具链:MinGW(gcc/g++)
- 做中型 / 大型项目时,一般还要装 CMake
- 写好 CMakeLists.txt
- 用 cmake 生成构建文件(Makefile 或 VS 工程)
- 再用 make 或编译器编译,最终生成 .exe 可执行文件
- Python:解释型语言,源码 → 直接由 Python 解释器逐行运行,所以,按照下面步骤执行:
- 本地先装 Python 解释器
- VSCode 装官方 Python 插件
- 创建并使用虚拟环境,实现依赖隔离
- 直接写 .py 源码,运行即可