【Allwinner ClassA20类库分析】 2.free pascal语法及结构简析
当然,仅仅是描写叙述一下一般会用到的东西,假设想深入了解pascal,请參考本节最后推荐的书。
free pascal的代码文件一般仅仅有两种,.lpr和.pas(或.pp);lpr文件是project文件。pas或pp是单元文件。一个完整的pascalproject必须包含一个lpr文件。来看一下Lazarus默认创建的project都包含些什么。打开Lazarus后点击所有保存,选择路径并确定。保存为默认的文件名称。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGpDRmVuZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
project1.lpr - 工程文件。整个程序的入口。普通情况下不须要手动改动;
project1.res - 工程资源文件,保存版本号、字符串等,不须要手动改动;
project1.lpi - project管理文件,保存project的信息,Lazarus靠此文件管理全部的文件为一个project。不须要手动改动。
project1.lps - IDE环境关闭时的信息,包含各种编辑窗口最后的位置等信息。不须要手动改动;
project1.ico - 图标文件。编译为可运行文件后显示的图标,不须要手动改动;
unit1.pas - 窗口源码文件,可手动加入代码。
unit1.lfm - 窗口属性代码文件,不须要手动改动;
能够看到,真正须要编写代码的地方仅仅有一个文件,unit1.pas。
后面我们就着重分析一下这个文件的结构。
注:unit文件保存的时候也能够选择扩展名为.pp。.pp和.pas文件的关系:.pp就是.pas文件。Delphi默认的源码文件为.pas,而Lazarus的源码文件为.pp。
Lazarus为了兼容Delphi,能够支持这两种扩展名,所以除了扩展名不允许外它们没有不论什么差别。
以下是一个pas文件的代码,我做了些凝视。能够非常清晰地看出各个部分的作用。
pascal的代码文件不分.h或.c,都包括在了.pas文件里,使文件结构更加简洁。须要对外开放的函数或定义。仅仅要写在implementation之上就能够了,代码编辑器在写入.后会自己主动提示可见的东西。不可见的则不会被显示。
结构说的差点儿相同了,还是来看看pascal的语法吧。语法和C语言大同小异,仅仅是把C里的{、}换成了begin、end,变量定义的名称和类型调换一下位置就算是会pascal了。呵呵,这样说法未免太不负责任,会遭到歧视的。只是在语法上真的区别不大,区别最大的地方是pascal有类这个东西。而类的说明我希望留在下一节。结合ClassA20的类库来解说,这样更easy接受。
本节还是继续基础的东
西吧。
pascal不区分大写和小写,下面为本人的习惯写法。仅供參考。
1.数据类型:
| C | pascal |
| int | Integer |
| short | ShortInt |
| long | LongInt |
| unsigned char | Byte |
| unsigned short | Word |
| unsigned long | LongWord或DWORD |
| float | Single |
| double | Double或Real |
| Boolean | |
| *p | Pointer |
| &p | @p或Pointer(p); |
想起来多少写多少。或许有错误,欢迎补充和指正。
2.操作符:
| C | pascal |
| = | := |
| + | + |
| - | - |
| * | * |
| / | div |
| % | mod |
| << | shl |
| >> | shr |
| & | and |
| | | or |
| ! | not |
| ^ | xor |
想起来多少写多少。或许有错误,欢迎补充和指正。
3.循环语句:
| c | pascal |
| for (i = 0; i < 10; i++) | for i:=0 to 9 do |
| while (1) ...; | while (1) do ...; |
| do ... while (1); | repeat ... until (1); |
想起来多少写多少,或许有错误,欢迎补充和指正。
4.比較语句:
| c | pascal //有没有括号都能够 |
| if (A == B) ... ; | if A = B then ... ; |
| if (A || B) ... ; | if A or B then ... ; |
| if (A && B) ... ; | if A and B then ...; |
|
switch (A) { case 1: break; case 2: break; default: break; } |
case A of 1: ; 2: ; else end; |
想起来多少写多少,或许有错误,欢迎补充和指正。
5.函数定义:
| c | pascal |
| void fun(); | procedure fun; |
| int fun(); | function fun:Integer; |
想起来多少写多少,或许有错误,欢迎补充和指正。
6.着重说一下String:
C中没有字符串这个类型。仅仅有字符数组char[],以'\0'结束。
pascal对字符串操作要强大非常多,能够定义数组array of Char或array of Byte;
另一个String类型。String即能够当错数组使用,也能够当成字符串使用,能够随时改变长度SetLength(String, 10),而且不须要手动释放当所在的函数生命周期结束后也就随之自己主动释放了(结构体中除外)。
数组转字符串:String(Byte数组或Char数组)
字符串转数组:String = @Byte数组[0];
取下标:Char:= String[1]; 或 Byte:= Ord(String[1]);
字符串相加:String:= String1 + String2;
字符串插入:Insert(String, SubString, Index);
字符串删除:Delete(String, Index, Count);
...
所以我一般在程序中都以String类型作为Buffer来进行传输或处理。操作非常方便。
想起来多少写多少,或许有错误。欢迎补充和指正。
7.着重说一下异常处理:
C中没有异常处理。
pascal有try,try有两种:
try
//运行的代码部分
except
//异常处理部分
end;
当运行代码部分发生了不论什么运行失败。使用try能够不至于使整个程序崩溃停止运行。而是能够跳转到异常处理部分进行错误处理,或能够友好地提示用户。
try
//运行代码部分
finally
//强制运行部分
end;
不管在代码运行部分运行不论什么的打断或退出等语句,finally部分都会被运行到,一般用于释放资源或其它必要的处理。
两者能够结合使用:
try
try
//代码
except
//异常处理
end;
//代码
finally
//强制运行
end;
经常使用的东西基本上就是这些。下一节開始正式解说ClassA20类库,敬请期待。
假设想下载ClassA20的封装类库文件,请訪问:https://github.com/tjCFeng/ClassA20。
【Allwinner ClassA20类库分析】 2.free pascal语法及结构简析的更多相关文章
- 【Allwinner ClassA20类库分析】4.GPIO类的使用
从本节起,開始使用ClassA20类库完毕操作外设的功能,请先在https://github.com/tjCFeng/ClassA20下载ClassA20类库. 封装的目的就是简化操作,试想一 ...
- WindowsPhone自定义控件详解(二) - 模板类库分析
转自:http://blog.csdn.net/mr_raptor/article/details/7251948 WindowsPhone自定义控件详解(一) - 控件类库分析 上一节主要分析了控件 ...
- Delphi / Pascal 语法知识干货
********************************************* Pascal.Delph干货 *************************************** ...
- LibLog 类库 分析
前期思考: Microsoft.Logging 是否可用? 是否需要提供默认的 Logger 实现? 不需要.1,用户自己开启日志功能,设置开启属性,即可打印出相应的日志. LibLog 类库分析: ...
- JDK框架简析--java.lang包中的基础类库、基础数据类型
题记 JDK.Java Development Kit. 我们必须先认识到,JDK不过,不过一套Java基础类库而已,是Sun公司开发的基础类库,仅此而已,JDK本身和我们自行书写总结的类库,从技术含 ...
- Twitter Storm源代码分析之ZooKeeper中的目录结构
徐明明博客:Twitter Storm源代码分析之ZooKeeper中的目录结构 我们知道Twitter Storm的所有的状态信息都是保存在Zookeeper里面,nimbus通过在zookeepe ...
- Twitter Storm源代码分析之Nimbus/Supervisor本地目录结构
storm集群里面工作机器分为两种一种是nimbus, 一种是supervisor, 他们通过zookeeper来进行交互,nimbus通过zookeeper来发布一些指令,supervisor去读z ...
- 标记化结构初始化语法 在结构体成员前加上小数点 如 “.open .write .close ”C99编译器 .
今天在看串口驱动(四)的时候 有这样一个结构体初始化 我很不理解 如下: static struct s3c24xx_uart_port s3c24xx_serial_ports[NR_PORTS] ...
- 基础语法-循环结构for
基础语法-循环结构for 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.for循环格式 for(初始化表达式;循环条件表达式;循环后的操作表达式){ 执行语句(循环体); } ...
随机推荐
- JavaScript、SSH知识点整理
七.Javascript部分 1:什么是Javascript JavaScript是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的脚本语言. 2:Java和Java ...
- clipper库使用的一些心得
clipper sourceforge官网:http://sourceforge.net/projects/polyclipping/ 1. 版本号差异 之前project里面使用4.8.6,近期升级 ...
- VC与JavaScript交互(一) ———— 怎样实现
为什么要让VC与JavaScript交互? 1.有时候我们须要让自己的软件打开一个网页.来获取页面上的一些数据. 这时,能够用mshtml解析HTML提取出数据.也能够向HTML文档动态写入我们准备好 ...
- css sprite的实现
css sprite 为什么使用css sprite? 网页上的非常多静态小图片在载入时须要大量http请求,添加了响应时间.(哈哈.雅虎34条优化法则的第一条啊) css的background-po ...
- 观光奶牛Sightseeing Cows (二分+spfa(dfs))
观光奶牛 农夫约翰已决定通过带他们参观大城市来奖励他们的辛苦工作!奶牛必须决定如何最好地度过他们的空闲时间. 幸运的是,他们有一个详细的城市地图,显示L(2≤L≤1000)主要地标(方便编号为1 .. ...
- 在ubuntu下安装redis
最简单在线安装的方式: #安装Redis服务器端 ~ sudo apt-get install redis-server 安装完成后,Redis服务器会自动启动,我们检查Redis服务器程序 # 检查 ...
- 下拉列表的使用(Ajax/数据联动)
下拉列表联动
- COM基础
为什么说COM的可重用性是建立在二进制级别? COM本身是语言无关,它的标准建立在二进制级别.对于使用COM组件的客户程序,它只需要要使用的COM对象信息就可以通过COM库的帮助创建和使用COM对象, ...
- Excel导入到DataTable ,DataTable导入到Excel
using System; using System.Collections.Generic; using System.Linq; using System.Text; using NPOI.SS. ...
- swfupload组件上传文件
前段时间做文件上传用的是H5的一个插件,由于浏览器的兼容性不好,所以又换了一个Flash版本的上传文件插件,感觉这个上传插件的使用方式跟H5的差不多,有些雷同.不过,由于后续浏览不再支持Flash(略 ...