6.087 Practical Programming in C, lec2: Variables and datatypes, operators.

Review: C Programming language

• C is a fast,small,general-purpose,platform independent programming language.

C中使用简单的数据类型(本质上全部都是数字)和有限的运算符(屈指可数)来构建其基本单元,使用栈来自动控制计算顺序,因此小而快。数字的表示和栈结构是所有计算机共有的,因此可以实现跨平台。总之,C和图灵机的计算模型十分类似,这使得其几乎能做计算机自身能做的任何事情。

• C is used for systems programming(e.g., compilers and interpreters, operating systems, databasesystems, microcontrollers etc.)

单个的C程序虽然小,但C中的库使得程序很容易复用,使C程序能够完成较大的工程。其它的编程语言(除早期Fortran这些不允许递归的语言)也能做到这点。

• C is static (compiled), typed,structured and imperative.

C编译出来的文件是二进制文件,可以到计算机(图灵机?)中直接执行,这也是C速度快的一个重要原因。这种方式的优点是速度快,但也丧失了一些灵活性,JavaC#等在虚拟机中执行的程序在运行时仍能保持类型信息,因此可以进行反射,从而很容易用其编写框架,这是C++这些所做不到的。(难道这是C++被认为不如Java面向对象的原因?)

• "C is quirky, flawed, and anenormous success."–Ritchie

我认为C是“巨人肩膀+天才灵感”的产物,Dennis不可能在很短的时间里一个人设计出一个接近完备的语言。他的天才指引了正确的方向,精简,C语言给人的感觉是精简的不能再精简了,连个String类型都不舍得添加。这使得C容易上手而且执行效率高,同时带来的问题是如果没有深刻理解C的执行机制,很容易出错。C比汇编的抽象层次高,封装了很多操作,使得更容易学习,但也正是这层抽象带来了问题,如果所有人在写C的时候能理解对应的汇编代码,也许错误会更少。


Datatypes:

• The datatype of an object in memory determines the set of values it can have and what operations that canbe performed on it.

这是我见过的对类型最精彩的定义,几乎是CProgrammingLanguage中的原话。当初读书时不仔细,学习了面向对象后对“类型”的定义也是稀里糊涂,直到在杨老师的课上听到了这个定义,觉得妙不可言,然后杨老师说这是CBible中的原话,更使我惊讶和内疚。

• C is a weakly typed language. Itallows implicit conversions as well as forced (potentially dangerous)casting.

C的核心就是尽量精简,抽象层次不是很高,因此没有强大的类型系统。类型是抽象的关键,因为类型这种东西完全是面向人的,类型对机器没什么用。类型最大的用途是将很多细节封装起来,并通过类型检查在编译时排查封闭在类型中的错误。

C中的隐式转型主要是为了方便,在数值计算时整型和浮点直接运算是很自然的事情,产生这种问题的一个重要原因是C中对数的表示方式不统一,如果都用浮点来表示数,那么应该不会有这个问题。

Operators:

• Operators specify how an object canbe manipulated (e.g.,, numeric vs. string operations).

• Operators can be unary(e.g., -,++),binary (e.g., +,-,*,/), ternary (?:)

C中操作符除binary(二目)运算符的运算顺序是从左到右外,其它运算符都是从右到左。运算符最终都会对应到电路的相关模块,一个重要特点是不存储数据,因此这些运算符可以并行执行。

Expressions:

• An expression in a programminglanguage is a combination of values, variables, operators, andfunctions

CBible中,有关expression是这么说的:Expressionscombine variables and constants to produce new values.我认为每个expression原则上都是一个赋值语句,虽然有时候调用返回类型为void的方法不需要赋值,但实际上可以看作是赋值语句的省略形式。

Variables:

• A variable is as namedlink/reference to a value stored in the system’s memory or anexpression that can be evaluated.

变量是一个link/reference,这点要牢记。变量并不等同于内存,和指针还是有很大的区别的。


C has a small family of datatypes.

• Numeric (int,float,double)

• Character (char)

• User defined (struct,union)

C中只有很少的类型,的确很少,只有三种,在这个高级语言遍地开花的时代,这看起来有些不可思议,但在Ritchie的时代,很多编程语言都没有类型。C的类型有些原始,因为char实际上可以和int通用,C之所以有如此旺盛的生命力,用户自定义类型功不可没。用户自定义类型使程序员可以灵活地实现数据层的抽象,方便对数据的管理。

我觉得C中运算符的操作应该是最基本的二进制操作,否则就是C中实现了运算符重载,我觉得RitchieC可能还没有实现运算符重载这么高级的技术。我想很多面向对象的语言都保留了非面向对象的运算符也是因为运算符和计算机基本指令十分接近的原因吧。

你可能感兴趣的:(c,语言,character,fortran,variables,Constants)