C语言课堂–现代编译环境搭建[2020年7月]

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

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

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

1. 教材选择

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

第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。

文件清单:

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)

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

2.2 下载安装VSCode编辑器

注意选择好 x64 或者 x86,
有两个.exe的是安装包(需要系统权限,不需要系统权限安装),另外.zip那个是绿色解压就能用的.

安装插件: c/c++ tools, chinese简体中文语言包, code-runner
具体步骤省略, 若连不上微软marketplace,那就FQ下载visx包离线安装.

2.3 配置VSCode的c语言环境

总结一下:

{
    "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个文件打个包,直接让学生下载即可:

Original: https://www.cnblogs.com/zhw618/p/13353903.html
Author: zhw618
Title: C语言课堂–现代编译环境搭建[2020年7月]

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/581796/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • redisson中的看门狗机制总结

    1:普通的Redis分布式锁的缺陷我们在网上看到的redis分布式锁的工具方法,大都满足互斥、防止死锁的特性,有些工具方法会满足可重入特性。如果只满足上述3种特性会有哪些隐患呢?r…

    Linux 2023年5月28日
    0139
  • Python 之Memcache中间件

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载,它通过在内存中缓存数据和减少读取数据库的次数,从而提高动态数据库驱动网站的速度。Mem…

    Linux 2023年6月14日
    0119
  • ArrayList中的遍历删除

    例如我们有下列数据,要求遍历列表并删除所有偶数。 List myList = new ArrayList<>(Arrays.toList(new Integer[]{2…

    Linux 2023年6月13日
    0100
  • redis好书推荐

    redis好书推荐原创amy_xing01 最后发布于2018-07-16 18:29:54 阅读数 10427 收藏展开Redis从入门到深入学习,推荐几本好书: 《Redis入…

    Linux 2023年5月28日
    097
  • 在linux中使用tcpdump抓包的方法:

    在linux中使用tcpdump抓包的方法: 1,运行下面命令来从所有网卡中捕获数据包: tcpdump -i any 2,从指定网卡中捕获数据包 tcpdump -i eth0 …

    Linux 2023年6月14日
    0135
  • podman(无根用户管理podman)

    用户操作在允许没有root特权的用户运行Podman之前,管理员必须安装或构建Podman并完成以下配置cgroup V2Linux内核功能允许用户限制普通用户容器可以使用的资源,…

    Linux 2023年6月7日
    093
  • PostgreSQL实战技能全解

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/Willoneday/p/16572876.htmlAu…

    Linux 2023年6月7日
    088
  • 网心云在PVE下三种磁盘IO模式(No cache,Write through,Write back)选择与优化指南

    最近在用网心云跑PCDN业务,由于是架在PVE环境上的,因此如何对磁盘IO进行优化就成了最大的问题… 1,开启虚拟机IO thread,有效降低CPU负载 2,强制CP…

    Linux 2023年5月27日
    0257
  • Linux pssh安装与使用

    说明:我这是没有在密钥认证的情况下操作 1、安装pssh [root@libin ansible]# yum install -y pssh [root@libin ansible…

    Linux 2023年6月13日
    094
  • jmeter并发设置的原理

    简介 广义并发 绝对并发 简介 ​ 性能测试过程中是否需要进行同步定时器的设置,需要根据实际情况来考虑。 ​ 举个栗子来讲是我们的双十一秒杀活动,这时候就必须实现请求数量达到一定数…

    Linux 2023年6月14日
    0153
  • 【论文笔记】Towards Certifying l-infinity robustness using neural networks with l-infinity-dist neurons

    原文地址 slides GitHub 代码 本文发表于 2021 ICML,提出了一个新颖的神经网络计算方式:对于网络中的每个神经元,不采用传统的线性转换+非线性激活函数的方式,而…

    Linux 2023年6月7日
    082
  • POJ1222、POJ3279、POJ1753–Flip

    为什么将着三个题放一起讲呢?因为只要搞明白了其中一点,就可以一次3ac了~~ 首先讲下每个题目的意思 1.EXTENDED LIGHTS OUT 给你5行6列的01矩阵,0代表该点…

    Linux 2023年6月7日
    0115
  • 利用prometheus 客户端采集磁盘容量脚本

    点击查看代码 #!/bin/bash #date: 20220621 #author:bin >/tmp/node_dmz.txt >/tmp/node_err.txt…

    Linux 2023年6月14日
    0101
  • Linux基础学习(四)

    自建yum仓库,分别为网络源和本地源 1.本地源 点击查看代码 root@ct7:~# yum install autofs root@ct7:~# systemctl enabl…

    Linux 2023年6月8日
    0138
  • PyTorch 介绍 | LEARN THE BASICS

    大多数机器学习流程都包括数据、创建模型、优化模型参数,以及保存训练模型工作。该教程向你介绍一个在PyTorch上实现的完整的机器学习工作流,并提供了了解这些概念详细信息的链接。 我…

    Linux 2023年6月16日
    0151
  • Linux

    ​ 大型企业高并发的 Java 应用程序都是部署在大型服务器之上的,而服务器的操作系统一般是使用高性能的 Linux(或Unix)的操作系统,不是 Windows 操作系统,所以编…

    Linux 2023年5月27日
    0163
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球