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速度快的一个重要原因。这种方式的优点是速度快,但也丧失了一些灵活性,Java和C#等在虚拟机中执行的程序在运行时仍能保持类型信息,因此可以进行反射,从而很容易用其编写框架,这是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 memorydetermines 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中实现了运算符重载,我觉得Ritchie的C可能还没有实现运算符重载这么高级的技术。我想很多面向对象的语言都保留了非面向对象的运算符也是因为运算符和计算机基本指令十分接近的原因吧。
分享到:
相关推荐
资料目录.bat Advice to next year student.doc lec1.ppt ...lec2.ppt lec20.ppt lec21.ppt lec22.ppt lec23.ppt lec24.ppt lec25.ppt lec3.ppt lec4.ppt lec5.ppt lec6.ppt lec7.ppt lec8.ppt lec9.ppt
LEC法,全称为Ladder of Events, Consequences(事件概率及其后果严重度)法,是一种在工业安全领域广泛应用的风险评估方法。此方法主要用于量化风险,通过考虑三个关键因素:发生事故的可能性(Likelihood)、暴露...
【Leader统帅LEC5001-Q7热水器安装与使用详解】 Leader统帅品牌的LEC5001-Q7热水器是一款家用挂墙式电热水器,其安装过程严谨且关键,需遵循安全规范,确保用户安全使用。以下是安装和使用的主要步骤及注意事项: ...
2. 动态规划与分治法的联系: 动态规划和分治法都是算法设计策略,但它们有显著不同。与分治法相比,动态规划算法通常会枚举所有可能的分割策略,并通过“编程”来避免重复计算共同子问题。这里的“编程”意味着...
programming in computing 10a lec2
In the previous lecture, we leant about impedance spectroscopy. Electrochemical impedance spectroscopy is the technique where the cell or electrode impedance is platted versus frequency. Thus, the ...
【Leader统帅LEC6002-WB5金热水器安装及使用注意事项】 1. **挂墙式安装**:热水器必须采用挂墙式安装,确保挂墙架牢固地挂在膨胀挂钩和螺栓上,以保证安装的安全性。挂架上部的两个孔用于主要支撑,下部的孔用于...
《Cadence Conformal LEC学习手册:从基础到高级》 本手册主要关注Cadence Encounter Conformal LEC(逻辑等价检查器),这是一种用于ASIC设计的形式验证工具。形式验证是一种利用数学证明方法来检查设计属性的系统...
2. **风险评价方法**:常用的风险评价方法有作业条件危险性分析法(LEC法)、作业危害分析法(JHA法)、危险与可操作性分析方法(HAZOP法)等。这些方法用于量化或定性评估风险等级。 3. **风险分级**:基于风险...
2. **药剂种类**:笛音剂是一种能产生哨音效果的药剂,用于烟花爆竹的制作中。 3. **准运证检查**:烟花爆竹在运输过程中应接受道路管理等相关单位的检查,确保运输安全。 4. **装甲防护装置**:装甲防护装置能够...
6. **财务监控**:强化账务处理的准确性,定期审计以发现并纠正问题。 7. **信息系统支持**:利用信息技术实现采购流程的自动化和透明化,减少人为错误。 采购业务的内部控制对于防范风险、保护企业资产、提高经营...
【Leader统帅LEC6001-20X1热水器】的说明书主要涵盖了热水器的安装、使用、维护和安全注意事项。以下是对这些知识点的详细解释: 1. **安装步骤**: - 安装前应根据机器型号选择合适的挂墙架,并在墙上钻孔固定...
【MIT-6.0001】是麻省理工学院(MIT)开设的一门入门级计算机科学课程,名为“Introduction to Computer Science and Programming in Python”。这门课程旨在为初学者提供计算机科学的基础知识,并教授使用Python...
7. **风险评价方法**:常用的风险评价方法有风险矩阵评价法和作业条件危险性评价法(LEC),用于确定危险源的风险等级。 8. **危险源**:包括物理实体、行为和状态三个方面,如设备、决策行为和物的状态。 9. **...
2. "lec-part-4-uppaal-input.pdf":这部分可能是一个讲座的第四部分,专注于UPPAAL输入语法和模型构造。它可能会讲解如何输入系统的行为模型,包括进程、同步、通信和时钟约束,以及如何输入查询来验证系统是否满足...
Lec 08 Particle Systems and ODE Solvers II, Mass Spring Modeling Assignment 2 Lec 09 Implicit Integration, Collision Detection Lec 10 Collision Detection and Response Quiz Lec 11 Ray Casting and ...
【Leader统帅LEC6.6U小厨宝说明书】提供了详尽的使用和安装指南,以确保用户安全、有效地使用该产品。以下是其中的关键知识点: 1. **电源要求**:这款热水器使用交流220V/50Hz电源,需要独立插座并确保可靠接地。...
- LEC法用于评估风险,其中E代表暴露于危险环境的频繁程度分值。 4. **隧道爆破技术**: - 对于岩石隧道,通常使用光面爆破或预裂爆破来控制开挖,选项C预裂爆破技术正确。 5. **雨期施工**: - 在雨期,沙类...
【Leader统帅LEC5001-ST热水器安装与使用注意事项】 1. **安装环境与位置**: - 热水器必须安装在室内,避免0℃以下可能导致结冰的环境,以防容器和水管破裂。 - 安装位置应选在便于使用、维修且有地漏的地方,以...