`
txf2004
  • 浏览: 6866570 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

《Linux C一站式学习》第一章 程序的基本概念

 
阅读更多

1. 程序和编程语言
程序是由一系列指令(instruction)构成,指令包含:输入、输出、基本运算、测试和分支、循环。
编程语言分为低级语言(机器语言和汇编语言,用计算机指令编写程序)和高级语言(C、C++、Java、Python,用语句编写程序)。

表1.1.一个语句的三种表示

编程语言 表示形式
C语言 a=b+1;
汇编语言

mov0x804a01c,%eax
add$0x1,%eax
mov%eax,0x804a018

机器语言

a11ca00408
83c001
a318a00408


最早的程序员都是直接用机器语言编程,但是很麻烦,需要查大量的表格来确定每个数字表示什么意思,编写出来的程序很不直观,而且容易出错,于是有了汇编语言,把机器语言中一组一组的数字用助记符(Mnemonic)表示,直接用这些助记符写出汇编程序,然后让汇编器(Assembler去查表把助记符替换成数字,也就把汇编语言翻译成了机器语言。从上面的例子可以看出,汇编语言和机器语言的指令是一一对应的,汇编语言有三条指令,机器语言也有三条指令,汇编器就是做一个简单的替换工作。
从上面的例子还可以看出,C语言的语句和低级语言的指令之间不是简单的一一对应关系,一条a=b+1;语句要翻译成三条汇编或机器指令,这个过程称为编译(Compile),由编译器(Compiler来完成,显然编译器的功能比汇编器要复杂得多。用C语言编写的程序必须经过编译转成机器指令才能被计算机执行,编译需要花一些时间,这是用高级语言编程的一个缺点,然而更多的是优点。首先,用C语言编程更容易,写出来的代码更紧凑,可读性更强,出了错也更容易改正。其次,C语言是可移植的(Portable)或者称为平台无关的(Platform Independent)。

图1.1.编译执行的过程

编译执行的过程

有些高级语言以解释(Interpret的方式执行,解释执行过程和C语言的编译执行过程很不一样。

#! /bin/sh
VAR=1
VAR=$(($VAR+1))
echo $VAR
这里的/bin/sh称为解释器(Interpreter),它把脚本中的每一行当作一条命令解释执行,而不需要先生成包含机器指令的可执行文件再执行。

图1.2.解释执行的过程

解释执行的过程
编程语言仍在发展演化。以上介绍的机器语言称为第一代语言(1GL1st GenerationProgramming Language),汇编语言称为第二代语言(2GL2nd Generation Programming Language),CC++JavaPython等可以称为第三代语言(3GL3rd GenerationProgramming Language)。4GL以后的编程语言更多是描述要做什么(Declarative)而不描述具体一步一步怎么做(Imperative),具体一步一步怎么做完全由编译器或解释器决定,例如SQL语言(SQLStructured Query Language,结构化查询语言)就是这样的例子。


习题1、解释执行的语言相比编译执行的语言有什么优缺点?
根据编译和解释的不同原理,你能否在执行效率和平台无关性等方面做一下比较?
答:解释型语言需要在运行时由解释器翻译成指令,效率低。
编译型语言已在编译时生成指令(机器码),效率高。跨平台时需重新编译。
2. 自然语言和形式语言
自然语言(Natural Language就是人类讲的语言,比如汉语、英语和法语。这类语言不是人为设计(虽然有人试图强加一些规则)而是自然进化的。形式语言(Formal Language是为了特定应用而人为设计的语言。例如数学家用的数字和运算符号、化学家用的分子式等。编程语言也是一种形式语言,是专门设计用来表达计算过程的形式语言。

形式语言有严格的语法(Syntax)规则,例如,3+3=6是一个语法正确的数学等式,而3=+6$则不是,H2O是一个正确的分子式,而2Zz则不是。语法规则是由符号(Token)和结构(Structure的规则所组成的。Token的概念相当于自然语言中的单词和标点、数学式中的数和运算符、化学分子式中的元素名和数字,例如3=+6$的问题之一在于$不是一个合法的数也不是一个事先定义好的运算符,而2Zz的问题之一在于没有一种元素的缩写是Zz。结构是指Token的排列方式,3=+6$还有一个结构上的错误,虽然加号和等号都是合法的运算符,但是不能在等号之后紧跟加号,而2Zz的另一个问题在于分子式中必须把下标写在化学元素名称之后而不是前面。关于Token的规则称为词法(Lexical)规则,而关于结构的规则称为语法(Grammar)规则


3. 程序的调试

据说有这样一个典故:早期的计算机体积都很大,有一次一台计算机不能正常工作,工程师们找了半天原因最后发现是一只臭虫钻进计算机中造成的。从此以后,程序中的错误被叫做臭虫(Bug),而找到这些Bug并加以纠正的过程就叫做调试(Debug)。


4. 第一个程序

main.c:
#include <stdio.h>
/* main: generate some simple output */
int main(void)
{
printf("Hello, world.\n");
return 0;
}

编译运行:
$ gcc main.c
$ ./a.out
Hello, world.

编译成其他名字:
$ gcc main.c -o main
$ ./main
Hello, world.

一个好的习惯是打开gcc-Wall选项,也就是让gcc提示所有的警告信息,不管是严重的还是不严重的,然后把这些问题从代码中全部消灭。
$ gcc -Wall main.c

分享到:
评论

相关推荐

    Linux C 编程一站式学习

    《Linux C编程一站式学习》适合做零基础的初学者学习c语言的第一本教材,帮助读者打下牢固的基础。

    亚嵌培训资料linux c语言一站式学习

    亚嵌培训资料,linux c语言一站式学习 很不错

    Linux C编程一站式学习

    Linux C编程一站式学习 这本书最初是为北京亚嵌教育研究中心的嵌入式Linux系统工程师就业班课程量身定做的教材之一。该课程是为期四个月的全日制职业培训,要求学员毕业时具备非常Solid的C编程能力,能熟练地使用...

    Linux C编程一站式学习(非扫描版)

    强调基本概念和基本原理,在编排顺序上非常重视概念之间的依赖关系,每次引入一个新的 概念,只依赖于前面章节已经讲过的概念,而绝不会依赖后面章节要讲的概念。有些地方为 了叙述得完整,也会引用后面要讲的内容,...

    LinuxC编程一站式学习

    2. 强调基本概念和基本原理,在编排顺序上非常重视概念之间的依赖关系,每次引入一个新 的概念,只依赖于前面章节已经讲过的概念,而绝不会依赖后面章节要讲的概念。有些地 方为了叙述得完整,也会引用后面要讲的...

    英文的Linux c语言一站式学习

    英文的Linux c语言一站式学习,下了看一看,很好的

    Linux-C-编程一站式学习

    Linux C 编程一站式学习.pdfLinux C 编程一站式学习.pdfLinux C 编程一站式学习.pdfLinux C 编程一站式学习.pdfLinux C 编程一站式学习.pdfLinux C 编程一站式学习.pdfLinux C 编程一站式学习.pdfLinux C 编程一站式...

    Linux C语言编程一站式学习--pdf完整版

    30本全部奉献(6):Linux C语言编程一站式学习--pdf完整版

    Linux C编程一站式学习.chm

    本书尽最大努力理清概念之间的依赖关系,力求一站式学习,读者不需要为了找一个概念的定义去翻其它书,也不需要为了搞清楚一个概念在本书中前后一通乱翻,只需从前到后按顺序学习即可。但一站式学习并不等于傻瓜式...

    Linux C编程一站式学习 包含不曾出版的第三部分Linux系统编程

    《Linux C编程一站式学习》分为两部分:第一部分讲解编程语言和程序设计的基本思想方法,让读者从概念上认识c语言;第二部分结合操作系统和体系结构的知识讲解程序的工作原理,让读者从本质上认识C语言。 《Linux C...

    linux c语言一站试学习

    linux c语言一站试学习linux c语言一站试学习linux c语言一站试学习linux c语言一站试学习linux c语言一站试学习linux c语言一站试学习linux c语言一站试学习linux c语言一站试学习linux c语言一站试学习linux c语言...

    linux C 编程一站式学习 最新版

    非常适合新手学习linux c语言,本人就靠这本书入门,上面涉及到操作系统,寻址,SOCKET通信,很好

    Linux C编程一站式学习 pdf

    Linux C编程一站式学习

    Linux_C编程一站式学习_最新版.TXT

    Linux_C编程一站式学习_最新版 Linux_C编程一站式学习_最新版 Linux_C编程一站式学习_最新版

    LinuxC编程一站式学习C

    Linux下的C语言开发,一站式学习文档,,包括C语言基础、

    Linux C编程一站式学习(随书资料)

    Linux C编程一站式学习(随书资料)Linux C编程一站式学习(随书资料)

Global site tag (gtag.js) - Google Analytics