back

C Programming Language

Introduction

# Basic Tutorial,  # Programming Language,  # C Programming Language

Basic tutorial of C programming language for self-motivated Chinese students

Last Updated: 2020-01-01


前言

注意:本教程撰写于 2019 年,彼时我对计算机世界的有限,因而教程内容具有一定的局限性;希望什么时候我能有时间重制一下吧。

由于国内绝大多数高校的计算机系都以 C 语言作为入门语言,且 C 语言本身的使用率也很高,因此 C 语言的零基础入门的教材、网课、在线教程实在是太多了,初学者可以很轻松地找到相关的高质量的内容,更别说大一年级都有 C 语言课。

基于这个事实,我并不打算再写 C 语言的从零开始入门的教程文章,这实在是没有什么意义。因此,本知识板块内的文章主要关注以下内容:

  • 基础知识中的一些难点和易错点,如指针、函数传参原理;

  • 某类知识,如果我发现国内教材和网上的中文资料中存在错误的;

  • 某类知识,如果我发现国内教材和网上的中文资料中鲜有介绍的,或是介绍得不够详细的;

  • 对于初学者而言最重要的,但国内本科课程却没有花费足够精力去教授的,如良好的代码风格、最基本的代码调试技巧;

  • 对于初学者学习语言非常有益的,如初学者常见错误的汇总;

因此,本教程中的所有文章均 假设读者同时在通过其他途径学习 C 语言 ,并假设读者对编程有一个最基本的认知,而不是面向完全零基础的读者。读者将会看到,对于基础语法,我只对一些有难度的核心内容(例如指针等)写了文章。

即便如此,我相信博客中的内容对初学者而言还是会很有帮助的。毕竟我只是假设读者不是完全零基础,但文章仍然是面向初学者的,其中的许多内容都是在网上较难找到的。

注意:我不是说你就找不到,不是说我的博客中讲的东西有多么特别,毕竟我不是神仙,这些知识我也是从各个地方找资料学习的,例如国外著名教材《C 和指针》和《C 专家编程》,再例如 CMU 的教学网站上的 C 语言的 wiki ,有不少内容我还特地去查证了 C 语言 ISO 标准的原始文件。 但是对于初学者来说,查阅这些资料显然过于困难了,具备查阅这些资料的能力的人通常已经脱离了新手期,绝大多数初学者还是会使用国内教材、网课以及网上的中文技术博客;我所做的只是总结这其中错误、缺失、或对新手而言难以发掘的部分,并用尽可能通俗的语言写成新手友好型的文章,帮助大家学习。

关于 C 语言标准的问题,除非另外声明,我写的 C 语言的文章都默认遵循如下规则:

  • 在介绍理论知识时,遵循 C99 标准,除非涉及 C89 和 C99 之间的差异;

  • 在使用代码示例时,尽量遵循 C99 标准,同时确保代码能在非严格的 C89 标准下正确运行。

这是考虑到国内本科课程经常会使用非严格的 C89 标准,但是 C89 和 C99 中的绝大部分理论知识是一样的,因此我个人认为这样是最合适的,不会产生混淆和误导。

另外,我的文章中所用的编译信息示例(如编译错误示例)均是我本机编译环境的运行结果,在不同编译环境下可能会得到描述有所不同的编译信息,但是其含义应当是相同的,除非你使用的不是标准 C 语言。

特别强调:大多数编译器并不是严格的 C 标准,通常具有一定的扩展,常见的有例如 GNU C 等。但这对初学者接触到的内容而言几乎没有影响,除了 VC6.0 上的编译器以外——因此强烈建议读者在学习 C/C++ 语言时不要使用 VC6.0 进行编程。

个人建议使用诸如 CodeBlocks 这一类的轻量级 IDE 进行初期的学习,但是无论你使用何种 IDE ,绝对不要使用 VC6.0 。