上一节介绍了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. Linux下I/O复用 Select与Poll

    Select #include <sys/time.h>#include <sys/types.h>#include <sys/unistd.h> int sele ...

  2. [HTML5] Text Alternatives

    Most of times, we need 'alt' to the images, so it can tell the screen reader what is this image abou ...

  3. 程序猿爱情表白专用html5动画网页的代码

    程序猿爱情表白专用html5动画网页的代码 下载地址:源代码 程序员表白专用的html5动画特效网页,真的挺羡慕创作者的水平,有这水平能够把爱表白给想表白的人,不要以为那些鲜花是用 的图片.你会发如今 ...

  4. .net mvc Model 验证总结

    ASP.NET MVC4中的Model是自验证的,这是通过.NET4的System.ComponentModel.DataAnnotations命名空间完毕的. 我们要做的仅仅是给Model类的各属性 ...

  5. CGContext含义

    代码 含义 CGContextRef context = UIGraphicsGetCurrentContext(); 设置上下文 CGContextMoveToPoint 开始画线 CGContex ...

  6. USACO 1.5 Superprime Rib

    Superprime Rib Butchering Farmer John's cows always yields the best prime rib. You can tell prime ri ...

  7. Laravel异常处理

    Laravel异常处理 标签(空格分隔): php 自定义异常类 <?php namespace App\Exceptions; use Throwable; use Exception; cl ...

  8. CZLayer的阴影

    CALayer有一个shadow属性 意思是阴影 shadowcolor  //颜色 shadowoffset  //偏移 shadowOpacity  //透明度 layer有一个方法    mas ...

  9. json字符串与json对象的相互转换

    什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * JSO ...

  10. android studio开发去掉titlebar

    android:theme="@style/AppTheme"换成android:theme="@style/Theme.AppCompat.NoActionBar&qu ...