C、C++、python对比_实践篇(2)

📅 2026/7/6 15:15:29
C、C++、python对比_实践篇(2)
0、前言这部分知识是对C\C\python对比_概览1中比较重要的部分实操验证这部分实践就是要搞清楚这三种语言每一种语言是如何在windows64位平台上面进行项目开发的搞清楚开发环境和开发流程所以每个案例功能上都相对简单下一篇再总结在linux环境中开发的方法。1、windowsvscode环境下配置C和C编译器、python解释器实测1.1、配置C和C编译器实操1、安装 MinGW-w64 编译器下载 MinGW-w64GCC Windows 版解压到无中文、无空格的路径如 D:\MinGW-w64\bin复制 bin 目录完整路径添加到系统环境变量 Path打开 CMD 测试出现版本号即成功。2、配置 VS Code安装 VS Code安装扩展C/C (Microsoft)3、CMake 工具可选大型项目必备MinGW 可能自带 cmakeCMD 输入 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 --versionWindows或python3 --versionMac/Linux能正常显示版本号即安装成功。装 VSCode 插件操作方法打开 VSCode点击左侧「扩展」图标或按 CtrlShiftX在搜索框输入「Python」找到微软官方发布的「Python」插件图标为蓝色蟒蛇作者是 Microsoft点击「安装」安装完成后重启 VSCode 使插件生效。用命令或图形化建虚拟环境操作方法两种方式二选一均在 VSCode 内操作图形化新手推荐按 CtrlShiftP 调出命令面板输入「Python: Create Environment」回车后选择「Venv」再选择已安装的 Python 解释器等待片刻即可自动创建虚拟环境默认命名为 .venv。命令行通用打开 VSCode 底部「终端」输入命令python -m venv .venvWindows或python3 -m venv .venvMac/Linux回车执行创建完成后Windows 输入.venv\Scripts\activate、Mac/Linux 输入source .venv/bin/activate终端前出现「(.venv)」即激活成功。在 VSCode 里选中这个虚拟环境作为解释器操作方法按 CtrlShiftP 调出命令面板输入「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、CmakeCmake根据 CMakeLists.txt生成 make 能看懂的makefile它是跨平台的Windows、Linux、Mac 都能用。CMakeLists.txt 用的是 CMake 专属的 “领域特定语言DSL” —— 这种语言是专门为 “定义项目构建规则” 设计的只用于描述 “怎么编译、链接、生成程序”不能写业务逻辑比如循环、判断也只是为构建服务。DSLdomain specific language特点语法极简像写声明一样不用关系其他的重点是要告诉CMake要做什么跨平台适配同一份CMakeList.txtCMake在windows下会转换为Makefilelinux下会转换为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\11252gcc--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\11252mingw32-make--versionGNU Make4.2.1 Builtforx86_64-w64-mingw32 Copyright(C)1988-2016 Free Software Foundation, Inc. License GPLv3: GNU GPL version3or laterhttp://gnu.org/licenses/gpl.htmlThis isfreesoftware: you arefreeto change and redistribute it. There is NO WARRANTY, to the extent permitted by law. C:\Users\11252cmake--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);#endifsrc/math_utils.c功能实现#includemath_utils.h// 加法实现intadd(inta,intb){returnab;}// 乘法实现intmultiply(inta,intb){returna*b;}src/main.c主程序#includestdio.h#includemath_utils.hintmain(){inta,b;printf(请输入第一个数字);scanf(%d,a);printf(请输入第二个数字);scanf(%d,b);// 调用我们写的函数intsumadd(a,b);intmulmultiply(a,b);printf(加法结果%d\n,sum);printf(乘法结果%d\n,mul);return0;}2.2.4、写构建规则CMakeLists.txtCMakeLists.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、CMakeC 版CMake 对 C 和 C 用法几乎一样只需要改一点点配置指定语言为 CXXC设置 C 标准如 C11 / C17其余逻辑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--version3.2.3、写所有程序src\Calculator.cpp#includeCalculator.h// 加法实现intCalculator::add(inta,intb){returnab;}// 乘法实现intCalculator::multiply(inta,intb){returna*b;}// 取最大值intCalculator::getMax(inta,intb){return(ab)?a:b;}src\Calculator.h#ifndefCALCULATOR_H#defineCALCULATOR_H// 计算器类classCalculator{public:// 成员函数声明intadd(inta,intb);intmultiply(inta,intb);intgetMax(inta,intb);};#endifsrc\main.cpp#includeiostream#includewindows.h// 加这个头文件#includeCalculator.husingnamespacestd;intmain(){// 加这行强制控制台使用 UTF-8SetConsoleOutputCP(65001);inta,b;cout请输入第一个数字;cina;cout请输入第二个数字;cinb;// 创建对象Calculator calc;// 调用成员函数intsumcalc.add(a,b);intmulcalc.multiply(a,b);intmax_valcalc.getMax(a,b);cout------------------------endl;cout加法结果sumendl;cout乘法结果mulendl;cout较大值max_valendl;return0;}3.2.4、写构建规则CMakeLists.txtcmake_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.5project2_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其他环境需要安装ipykernelpip install ipykernel -i https://mirrors.aliyun.com/pypi/simple/且需要运行指令python -m ipykernel install --user --namevenv_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的内核kernelJupyter 与环境之间的通信通道一个内核对应一个环境注意安装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 交互环境逐行执行写代码运行输入代码后shiftenter运行结果直接显示切换笔记模式按ESC按M切换Markdown写文字之后按shiftenter渲染切换内核顶部Kernelchange kernel选择已经注册的环境内核保存Ctrls文件就会保存在启动jupyter时候的文件夹关闭jupyter关闭浏览器——终端按ctrlc停止关闭快捷操作运行shiftenter、插入单元格a是向上插入/b是向下插入、切回代码单元格EscY、切到markdownEscM4.2、VScode开发python项目4.2.1、项目简介通过自定义计算器类实现加减乘除运算结合 Python 基础语法与第三方库实现数据格式化输出完整练习类、对象、函数、模块库使用。4.2.2、项目结构4.2.3、项目程序calculator.py# 计算器类classCalculator:def__init__(self):self.result0defadd(self,a,b):self.resultabreturnself.resultdefsub(self,a,b):self.resulta-breturnself.resultdefmul(self,a,b):self.resulta*breturnself.resultdefdiv(self,a,b):ifb0:return错误除数不能为0self.resulta/breturnself.resultmain.pyfromcalculatorimportCalculatorfromtabulateimporttabulate# 第三方库# 基础语法print( Python 基础语法演示 )a10b3print(f数字a{a}, 数字b{b})# 使用类calcCalculator()# 计算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[运算,结果],tablefmtgrid))4.2.4、项目运行结果4.3、jupyter开发python项目jupyter适合用来做数据分析。总结C/C编译型语言源码 → 编译 → 链接 → 可执行文件所以需要以下步骤需要在 VSCode 装插件C/C 扩展本地要装编译器工具链MinGWgcc/g做中型 / 大型项目时一般还要装 CMake写好 CMakeLists.txt用 cmake 生成构建文件Makefile 或 VS 工程再用 make 或编译器编译最终生成 .exe 可执行文件Python解释型语言源码 → 直接由 Python 解释器逐行运行所以按照下面步骤执行本地先装 Python 解释器VSCode 装官方 Python 插件创建并使用虚拟环境实现依赖隔离直接写 .py 源码运行即可