0一站式学习笔记

#名称: Linux编程  第0课
#参考资料: 亚嵌一站式C编程
#作者 一路向北
#时间 2013-8-15 8:35
#版本 RetHat 4.1.2-48
#内核版本 2.6.18-194.
#说明:


1、程序和编程语言
·程序的基本概念
···程序就是告诉计算机应该如何完成一个计算的任务计算任务可以是数学计算也可以是符号运算。
计算机是由数字电路组成的运算机器,只能对数字进行运算,我们看到的对其他的方式运算其实都是数字经过
专门的硬件设备转换成人可以听到的看到的声音和图像。


程序由一系列指令(Instruction)组成,指令是指示计算机做某种运算的命令,包括:
输入Input 从键盘文件或者其他设备获取数据
输出Output 把数据显示到屏幕,或者存入一个文件或者发送到其他设备
基本运算 执行最基本的数学运算(加减乘除) 数据存取
测试和分支 测试某个条件,然后根据不同的测试结果执行不同的后续指令
循环 重复执行一系列操作


即使再复杂的程序,只需要这几类指令就足够了,所以说编写程序可以描述成这样一个过程:
把复杂的任务分解成子任务,把子任务分解成更简单的任务,层层分解直到最后简单的可以用以上指令来完成


高级语言都是可以用语句(Statement)编写程序的,语句是计算机指令的抽象表示。
·汇编语言将机器语言中一组一组的数字用助记符(Mnemonic)表示,直接用这些助记符写出汇编程序,然后让
·汇编器(Assmbler)去查表把助记符替换成数字,也就是把汇编语言翻译成机器语言。汇编语言只做一个简单的
替换功能,机器语言有几条汇编就有几条。
·由C语言到低级语言的指令可以看出,这不仅仅是一个对应关系,a=b+1,语句要翻译成三条汇编或者机器指令,
这个过程称为编译(Compile),有编译器(Compiler)来完成。所以就是说C语言编写的程序必须经过编译转成机
器指令才能被计算机执行。缺点是编译时间长,有点是代码紧凑可读性强,容易改正,有可移植性(Portable)
也可以叫做平台无关的(Platform Independent).


下面就解释一下平台这个词语:
这个词语在计算机中有很多解释,可以指计算机体系结构(Architecture),也可以指操作系统(Operating System),
也可以指开发平台(编译器、链接器)。
所谓的C语言跨平台的意思就是说:因为不同的计算机体系结构有自己不同的指令集,也就是说可以识别的机器指令
的格式是不同的,直接用某种体系结构的汇编语言或者机器指令程序只能在这种体系结构的计算机上运行。
但是C语言就不同,因为每种体系结构的计算机都各自的C编译器,可以把C程序编译成各种不同的体系结构的机器指令,
只将要将C语言写的程序稍加改动就可以在各种不同的计算机上编译运行。


注意:1、驱动程序外,其他的程序绝大部分用高级语言编写。
      2、应该尽量避免不可不可移植的语法特性。


程序执行的步骤:
源代码(Source Code)或者源文件,然后进行编译生成一个新的文件叫可执行文件,这个过程
就是把源码翻译成机器指令,再加上一些描述信息。最后可执行文件被操作系统加载运行,
计算机执行该文件中由编译器生成的指令。
如图1.1 编译执行的过程




.sh文件是Shell脚本文件(打开开发的环境好好看看)
eg:script.sh
#! /bin/sh
VAR=1
VAR=$(($VAR+1)) //自增1
echo $VAR //打印结果VAR的值


用Shell程序/bin/sh解释执行这个脚本,结果为:
$ /bin/sh script.sh
2
此处的/bin/sh称为解释器(Interpreter),也就是把脚本中的每一行当做一条命令解释执行,而不需要先生
成包含机器指令的可执行文件再执行。把上述三行当做命令直接敲到Shell提示符下,也能得到同样的结果。


解释执行的过程:
source code -- interpreter-- result
解释器读取源 程序运行的结果
代码解释执行 出现在屏幕上

一代语言:机器语言
二代语言:汇编语言
三代语言:C/C++/java
四代语言:SQL结构化语言查询


2、自然语言和形式语言
关于Token的规则称为词法(Lexical)规则,而关于结构的规则称为语法(Grammar)规则[1]。
语法规则是由符号(Token)和结构(Structure)的规则所组成的


3、程序的调试
概念明确、逻辑清晰,性格沉稳
程序中的Bug分为以下几类:


编译时错误:编译器只能翻译语法正确的程序,否则就失败,无法生成可执行文件。
运行时错误:程序运行时崩溃
逻辑错误和语义错误:观察到底在做什么从而找出逻辑错误到底在哪
把调试当做作侦探,“当你把不可能的全部剔除,剩下的————即使看起来再怎么不可能————就一定是事实”
小模块调试


4、第一个程序
gcc是Linux平台的C编译器,用参数-o参数指定自己的文件名gcc main.c -o main
部分:Boilerplate
注释:Comment
;号:Semicolon
括号:Brace或者Curly Brace
缩进:Indent
空格:Blank


gcc -Wall main.c 查看程序中所有的警告,包括gcc默认的不提示信息。
每个编译命令都加上Wall这样就可以把所有的警示信息都显示出来
eg:
[Ser_Unix@jan AK]$ gcc -wall hello.c 
gcc: unrecognized option `-wall'
[Ser_Unix@jan AK]$ gcc -Wall hello.c 
hello.c: In function `main':
hello.c:5: warning: null argument where non-null required (arg 1)
[Ser_Unix@jan AK]$ gcc hello.c 


普通用户后面跟着的是$,超级用户后面跟着的是#


初学者练习熟悉调试提示信息的方法:
从一个正确的程序开始每次改动一小点,然后编译看是什么结果,
如果出错了,就尽量记住编译器给出的错误提示并把改动还原。
因为错误是你改出来的,你已经知道错误原因是什么了,所以能很容易地把错误原因和错
误提示信息对应起来记住,这样下次你在毫无防备的情况下撞到这个错误提示时就会很容易
想到错误原因是什么了。这样反复练习,有了一定的经验积累之后面对编译器的错误提示就会
从容得多了。
源程序以及错误
#include <stdio.h>
int main()
{
        printf("Hello World!");
        printf(0); hello.c:5: warning: null argument where non-null required (arg 1)
        //return 0; hello.c:7: warning: control reaches end of non-void function
        如果缺;则报错误hello.c:7: error: syntax error before '}' token
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值