看过了很多专家吐槽目前的大学c语言教学问题多多:

  • 教材难懂,消磨了学生的兴趣;
  • 环境老旧,都2020了还有在用VC6甚至TurboC 2.0,语法不规范。

轮到自己上课,心想可不能再继续这样的c语言课堂。

1. 教材选择

先从教材的选择开始, 网上大家评价较好的有两本:

  1. 《明解C语言(第3版)入门篇》,定价:79,页数:405页。
  2. 《C语言程序设计:现代方法(第2版)》,定价:79,页数:618页。

第1本是日本的经典c语言教材,第二本据说是普林斯顿大学的c语言参考教材。

考虑到第2本618页的厚度,为了避免把同学们吓住,就选了第一本。

两本都比较贵,但是比起用完就扔的垃圾教材,毕业多年后再翻出来看的经典教材,绝对物有所值! 相信同学们会理解的。

2. 编程环境选择的原则

选定教材,编程环境是最重要的。选择原则:

  • 编译器不能太老旧,vc6和TC2就算了。至少c99标准完美支持吧。
  • 不能太傻瓜化,VS2015、VS2017/19啥的,轻松占几十G空间不说,学生还搞不懂编译的过程。
  • 最好是业界在用的,有一些教学环境也不错(比如:DevCpp,codeblocks)但公司里哪见过有人用?

这么一筛选,也就只能从 VS201x,VSCode,Clion 这几个中选了,那就用最轻量的 VSCode吧!

编译器也只有这三个: cl,gcc,clang。 既然不装vs大块头,那windows下gcc最好用。

2.1 下载安装gcc编译器: Mingw-w64

MinGW 的全称是:Minimalist GNU on Windows 。

它实际上是将经典的开源 C语言 编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32API。一句话来概括:MinGW 就是 GCC 的 Windows 版本 。

MinGW有两个发行版:MinGW-w64 与 MinGW 。区别在于 MinGW 只能编译生成32位可执行程序,而 MinGW-w64 则可以编译生成 64位 或 32位 可执行程序。

正因为如此,果断采用 MinGW-w64。

Mingw-w64下载地址:

https://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win64/

当前(2020.7)最新版本是: MinGW-W64 GCC-8.1.0

文件清单:

x86_64-posix-sjlj

x86_64-posix-seh

x86_64-win32-sjlj

x86_64-win32-seh

i686-posix-sjlj

i686-posix-dwarf

i686-win32-sjlj

i686-win32-dwarf

作为学生现在的电脑软硬件水平,推荐下载: x86_64-posix-seh

  • 释义1:

x86_64: 简称X64,64位操作系统。

i686: 32位操作系统 (i386的子集),差不多奔腾2(1997年5月)之后的CPU都是可以用的;

  • 释义2:

DWARF:一种带调试信息(DWARF- 2(DW2)EH)的包, 所以比一般的包尺寸大,仅支持32位系统

SJLJ:跨平台,支持32,64位系统,缺点是:运行速度稍慢,但是可以在没有使用GCC编译的代码或没有调用堆栈的代码上工作

SEH: 调用系统机制处理异常,支持32,64位系统。(Structured Exception Handling)Windows使用自己的异常处理机制。

  • 释义3:

posix: 启用了C++ 11 多线程特性

win32: 未启用 (从时间线上正在尝试也启用部分 Treading)

下载后解压到某个目录,我自己是放到: C:\Lang\mingw64

然后把bin目录( C:\Lang\mingw64\bin )添加到系统PATH变量中即可.

验证: 打开cmd黑窗口, 分别敲命令: gcc, g++, gdb, 分别看看这几个命令是否输出正确.

2.2 下载安装VSCode编辑器

微软官方下载地址:

https://code.visualstudio.com/#alt-downloads

注意选择好 x64 或者 x86,

有两个.exe的是安装包(需要系统权限,不需要系统权限安装),另外.zip那个是绿色解压就能用的.

安装插件: c/c++ tools, chinese简体中文语言包, code-runner

具体步骤省略, 若连不上微软marketplace,那就FQ下载visx包离线安装.

2.3 配置VSCode的c语言环境

微软官方的配置文档: https://code.visualstudio.com/docs/cpp/config-mingw

英文的, 初次看我反正是看晕乎了, 学生去看肯定更晕乎! @_@ 必须给学生简单的配置好.

总结一下:

  1. 配置文件主要有4个(均为json格式),可以配置在两个不同的地方:

    • 放在一个名叫 .vscode 的文件夹里,这个文件夹又放置在每一个工作目录(workspace)下. 这样配置只对这个工作目录有效;
    • 也可将这些json配置文件放到个人文件夹下(例如:C:\Users\zhw\AppData\Roaming\Code\User\ 下), 这样配置对此用户全局有效.

      (但是,貌似 c_cpp_properties.json 放这里, include语句会找不到头文件, vscode用波浪线标出; 影响感官,但并不影响编译!)
  2. 第一个配置文件: c_cpp_properties.json ,用于指定c/c++的编译命令、参数、include路径、lib路径等. 内容如下:

{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"C:/Lang/mingw64/include",
"C:/Lang/mingw64/x86_64-w64-mingw32/include"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "8.1",
"compilerPath": "C:/Lang/mingw64/bin/gcc.exe",
"cStandard": "c99",
"cppStandard": "c++11",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}

3)第二个配置文件: tasks.json, 用于定义编译任务. 以下代码定义了两个编译任务:

{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C: gcc.exe build active file",
"command": "gcc.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"-std=c99"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"type": "shell",
"label": "C: gcc.exe build ALL *.c files",
"command": "gcc.exe",
"args": [
"-g",
"${workspaceFolder}\\*.c",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"-std=c99"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": "build"
}
]
}

4)第3个配置文件: launch.json ,用于配置调试相关任务. 代码如下:

{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "gcc.exe - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\Lang\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C: gcc.exe build active file"
}
]
}

5)第4个配置文件: settings.json , 是编辑器本身的一些配置. 这里我配置了: 启动cmd时直接chcp 65001切换到utf8环境,还有code-runner的c语言配置:

{
"terminal.integrated.shell.windows": "C:\\Windows\\System32\\cmd.exe", //默认的shell环境:cmd
"terminal.integrated.automationShell.windows": "C:\\Windows\\System32\\cmd.exe", //缺少此行, 在65001环境下编译可能会提示: 无效的参数 -/d.
//"terminal.integrated.shellArgs.windows": ["/K", "chcp 65001>nul"], //打开cmd时自动切换到utf-8环境, 避免中文乱码. 不输出chcp回显
"terminal.integrated.shellArgs.windows": ["/K", "chcp 65001>nul"], //打开cmd时自动切换到utf-8环境, 避免中文乱码. 有 65001 代码页回显 "code-runner.executorMap": {
"javascript": "node",
"php": "C:\\php\\php.exe",
"python": "python",
"perl": "perl",
"ruby": "C:\\Ruby23-x64\\bin\\ruby.exe",
"go": "go run",
"html": "\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\"",
"java": "cd $dir && javac $fileName && java $fileNameWithoutExt",
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
},
"code-runner.defaultLanguage": "c"
}

总结

安装好 vscode 及插件, 然后拷贝文件到两种配置位置:

  • 拷贝4个json文件, 扔到工作目录(自己写代码的目录)的 .vscode 文件夹下[推荐!]
  • 或后3个json文件, 扔到用户的个人文件夹下: C:\Users\zhw\AppData\Roaming\Code\User\

搞定!

为了方便学生, 上课前将上述4个文件打个包,直接让学生下载即可:

链接: https://pan.baidu.com/s/15flVkSeWtaRUFBGoIfHlIQ

提取码: fxcs

C语言课堂--现代编译环境搭建[2020年7月]的更多相关文章

  1. C语言编程入门之--第二章编译环境搭建

    第二章 编译环境搭建 导读:C语言程序如何工作,首先需要编译链接成可执行文件,然后就可以运行在不同的环境中,这个“环境”的意思就是比如说,电脑,手机,路由器,蓝牙音箱等等智能设备中,其中编译器启到了关 ...

  2. Tiny4412 开发板 编译环境搭建【转】

    本文转载自:http://blog.csdn.net/beijiwei/article/details/51055369 版权声明:本文为博主原创文章,未经博主允许不得转载. /*********** ...

  3. ubuntu12.04下安卓编译环境搭建总结

    前言:      因为工作需要,经常要编译安卓下的动态库,公司有已经搭建好环境的服务器,但是第一自己想自己搭建一下了解一个整个过程,另外,公司的服务器也经常出现问 题,导致编译不了,所以就想自己搭建环 ...

  4. windows下cocos2dx3.0开发环境及Android编译环境搭建

    cocos2dx更新到了3.x版本号,自己一直没有换,如今开发组要求统一换版本号,我就把搭建好开发环境的过程记录下来. 一.Windowns下开发环境搭建 1.  所需工具         1)coc ...

  5. Emscripten编译环境搭建--将C和C++编译成JS

    Emscripten编译环境搭建--将C和C++编译成JS 需求:linux环境下用js执行c.c++文件,使用emscirpten编译器 目标:搭建好Emscripten环境 环境:Ubuntu16 ...

  6. openwrt(一):openwrt源码下载及编译环境搭建

    声明:从网上各位大神的博客学习,整理后记录,非原创. 注:请用非root用户来下载源码 导航: 1. openwrt编译环境搭建 2. openwrt源码下载 3. feeds更新 1. openwr ...

  7. IoT设备程序开发及编译环境搭建初体验

    引言 Mirai事件一经曝出,立即引领了一轮研究IoT设备的热潮.目前,对Mirai的报告大多只是在对其功能实现上的介绍,却很少提及如何实现IoT设备程序开发的测试环境.本文在对Mirai的源码研究的 ...

  8. u-boot 移植(一)编译环境搭建

    u-boot 移植(一)编译环境搭建 soc:s3c2440 board:jz2440 uboot:u-boot-2016.11 toolchain:gcc-linaro-7.4.1-2019.02- ...

  9. Go语言Windows 10开发环境搭建:Eclipse+GoClipse

    Intel Core i5-8250U,Windows 10家庭中文版,go version go1.11 windows/amd64, Eclipse IDE for C/C++ Developer ...

随机推荐

  1. Linux 30岁,这些年经历了什么?

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 3月19日,Linux基金会在Twitter上发布推文宣布,其小企鹅的标志"Tux& ...

  2. 常用的Linux 系统备份、恢复命令

    公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 删库跑路的事常常听说,不过,这只能是个调侃的话题,真正的工作中可不能这么干,否则,库是删了,路怕是跑不了了. 所以,备份很重 ...

  3. Java学习笔记-基础语法Ⅹ-进程线程

    学习快一个月了,现在学到了黑马Java教程的300集 打印流的特点: 只负责输出数据,不负责读取数据 有自己的特有方法 字节打印流:PrintStream,使用指定的文件名创建新的打印流 import ...

  4. Java课程课堂作业代码

    前言 本文章只是单纯记录课堂老师布置的课堂作业代码,题目都比较简单,所以没有写解题思路,相信大家都能理解,当然其中有的解法和代码不是最优的,当时只是为了完成题目,后来也懒得改了,如果有不恰当或者不正确 ...

  5. UDP协议,多道技术,进程,同步与异步,阻塞与非阻塞

    UDP协议 简介 UDP叫做用户数据报协议,是OSI七层参考模型中传输层使用的协议,他提供的是不可靠传输,既它在传输过程 中不保证数据的完整性! 端口号 UDP使用IP地址和端口号进行标识,以此将数据 ...

  6. 200 行代码实现基于 Paxos 的 KV 存储

    前言 写完[paxos 的直观解释]之后,网友都说疗效甚好,但是也会对这篇教程中一些环节提出疑问(有疑问说明真的看懂了 ),例如怎么把只能确定一个值的 paxos 应用到实际场景中. 既然 Talk ...

  7. WPF 分组

    分组和树形结构是不一样的. 树形结构是以递归形式存在.分组是以键值对存在的形式,类似于GroupBy这样的形式. 举个例子 ID NAME SEX Class 1 张三 男 1 2 李四 女 2 3 ...

  8. 第06组 Beta冲刺 (3/5)

    目录 1.1 基本情况 1.2 冲刺概况汇报 1.郝雷明 2. 方梓涵 3.曾丽莉 4.杜筱 5. 董翔云 6.黄少丹 7.鲍凌函 8.詹鑫冰 9.曹兰英 10.吴沅静 1.3 冲刺成果展示 1.1 ...

  9. ElasticSearch7.3学习(三十)----ES7.X SQL新特性解析及使用Java api实现sql功能

    一.ES7 sql新特性 1.1 数据准备 创建索引及映射 建立价格.颜色.品牌.售卖日期 四个字段 PUT /tvs PUT /tvs/_mapping { "properties&quo ...

  10. element-ui table组件使用v-if时的问题

    element-ui项目中经常遇到需要使用v-if指令来根据情况动态显示隐藏某些列情况,这时就会出现滚动条样式异常.列错乱.列宽错乱等问题 解决办法:在el-table上添加:key="Ma ...