上一节介绍了Lazarus一般的开发操作流程,对于不熟悉pascal语言的朋友可能看的还是不大明确。不知道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语法及结构简析的更多相关文章

  1. 【Allwinner ClassA20类库分析】4.GPIO类的使用

        从本节起,開始使用ClassA20类库完毕操作外设的功能,请先在https://github.com/tjCFeng/ClassA20下载ClassA20类库. 封装的目的就是简化操作,试想一 ...

  2. WindowsPhone自定义控件详解(二) - 模板类库分析

    转自:http://blog.csdn.net/mr_raptor/article/details/7251948 WindowsPhone自定义控件详解(一) - 控件类库分析 上一节主要分析了控件 ...

  3. Delphi / Pascal 语法知识干货

    ********************************************* Pascal.Delph干货 *************************************** ...

  4. LibLog 类库 分析

    前期思考: Microsoft.Logging 是否可用? 是否需要提供默认的 Logger 实现? 不需要.1,用户自己开启日志功能,设置开启属性,即可打印出相应的日志. LibLog 类库分析: ...

  5. JDK框架简析--java.lang包中的基础类库、基础数据类型

    题记 JDK.Java Development Kit. 我们必须先认识到,JDK不过,不过一套Java基础类库而已,是Sun公司开发的基础类库,仅此而已,JDK本身和我们自行书写总结的类库,从技术含 ...

  6. Twitter Storm源代码分析之ZooKeeper中的目录结构

    徐明明博客:Twitter Storm源代码分析之ZooKeeper中的目录结构 我们知道Twitter Storm的所有的状态信息都是保存在Zookeeper里面,nimbus通过在zookeepe ...

  7. Twitter Storm源代码分析之Nimbus/Supervisor本地目录结构

    storm集群里面工作机器分为两种一种是nimbus, 一种是supervisor, 他们通过zookeeper来进行交互,nimbus通过zookeeper来发布一些指令,supervisor去读z ...

  8. 标记化结构初始化语法 在结构体成员前加上小数点 如 “.open .write .close ”C99编译器 .

    今天在看串口驱动(四)的时候 有这样一个结构体初始化 我很不理解 如下: static struct s3c24xx_uart_port s3c24xx_serial_ports[NR_PORTS] ...

  9. 基础语法-循环结构for

    基础语法-循环结构for 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.for循环格式 for(初始化表达式;循环条件表达式;循环后的操作表达式){ 执行语句(循环体); } ...

随机推荐

  1. 【转】一分钟读懂互联网广告竞价策略GFP+GSP+VCG

    参考这篇文章: http://ju.outofmemory.cn/entry/116780 一分钟读懂互联网广告竞价策略GFP+GSP+VCG 两个广告位,三家广告主竞价,广告平台究竟应该制定广告竞价 ...

  2. rails new app的时候设置skip-bundle

    rails new app的时候设置skip-bundle rails new app --skip-bundle 这样可以越过bundle install阶段:

  3. 为代码减负之&lt;三&gt;视图(SQL)

    在设计数据库时为了降低数据冗余.一般都会依照三范式去设计,但有时我们在查询时须要通过一字段获取跟这 个字段相关联的好几个字段.可是他们又分布在不同的表中,这时候假设依照正常途径走的话须要同一时候查询好 ...

  4. BZOJ 4184 线段树+高斯消元

    思路: 线段树表示的是时间 每回最多log个段 区间覆盖 一直到叶子 的线性基 xor 一下 就是答案 一开始没有思路 看了这篇题解 豁然开朗 http://www.cnblogs.com/joyou ...

  5. BZOJ 1989 概率相关

    思路: 一条边免费的概率为 (经过它的路/总路径条数)^2 DFS即可 有个地方没有用 long long炸了好久- //By SiriusRen #include <cstdio> us ...

  6. caffe.bin caffe的框架

    最近打算看一看caffe实现的源码,因为发现好多工作都是基于改动网络来实现自己的的目的.比如变更目标函数以及网络结构,以实现图片风格转化或者达到更好的效果. 深度学习框架 https://mp.wei ...

  7. 在vue中使用less

    首先vue环境搭建成功 第一步: 安装 less 和less-loader 安装less依赖:npm install less less-loader --save 第二步: 修改webpack.ba ...

  8. IOS入门之创建视图和控件绑定

    学习IOS几天了,跟着教程做了两个小应用了,现在先来总结一下.今天就是创建视图和绑带到代码了.其实就是常见的MVC模式实现. 使用的Xcode版本是8.2. 在Xcode创建项目之后,默认就会创建一个 ...

  9. Apache2.2伪静态配置

    最近由于工作的需要要配置一下Apache的伪静态化,在网上搜了好多都无法完成,所以觉得有必要在这里写一下. 第一步:打开Apache的httpd.conf文件,把LoadModule rewrite_ ...

  10. hdu 5372 Segment Game 【 树状数组 】

    给出一些操作, 0是将第i次增加的线段放在b位置,第i次放的线段的长度为i 1是将第b次增加操作放的线段删除 每次增加操作完之后,询问这条线段上面的完整的线段的条数 每次询问统计比这条线段左端点大的线 ...