关键词: PocketC                                         
P.C语法
(声明:资料来源:www.imomo/apple 向版主学习)
P.C的语法和C的语法很相像,但是还是有很多的不同.特別是它没有 "structs" 、"typedefs",和一些运算符:"+="、"-="、"*="、"/=",而增加"string"这个功能强大的数据类型。
数据类型
在PocketC有5种数据类型:
(1)4字节的整形  int
(2)4字节的浮点数  float
(3)2字节字符  char
(4)字符串  string
(5)指针  pointer
运算表达式
可以是任意数字,变量,函数,常数等。
3 + 5
6.7 + 23
"Hello " + "World"
5*3 + foobar()
也可以是不同形态的值:
5.7 + 8
8先变为浮点数(8.0),再相加(5.7+8.0)
注意:使用字符串(string)数据类型时,运算结果会有很大不同.如下例:
注意括号
"答案:" + (5 + 8)
5先和8相加,在转换为字符串然后和“答案”相加,所以结果是"答案:13".
但是这样有不同了
"答案:" + 5 + 8
她输出的结果是 "答案:58", 5和8被先转换为字符串,然后进行字符串的相加
也可以强制转换类型
56 + (int)"7"
结果为 63.字串"7"被强制转换为整数。
运算符
运算符
按优先顺序:
从上到下 约往下越优先
优先顺序  运算符  法则    说明
11 = 由右至左 设定变量的值,变量在左边,数值在右边
10  ||  由左至右 逻辑运算'or',当真时1,否时为0
9  && 由左至右 逻辑运算 'and'当真时1,否时为0
8  |  由左至右 位元运算 'or'
7  ^  由左至右 位元运算 'xor'
6  &  由左至右 位元运算 'and'
5  == != < <= > >= 由左而右 比较运算 == (相等), != (不相等), <= (小于或等于), >= (大于或等于)  若符合条件为1,否则为0
4 << >> 由左至右 移位运算.必须为整形或字符.
3  + - 由左至右 加法,减法(字串使用时用法不同)
2  * / %  由左至右 乘法,除法,求余(不能用于字符串)
1  - ! ++ - - ~ * [] () & 由左至右 - (负数), ! (逻辑 'not'), ++ (递加), -- (递减),  ~ (bitwise neg), [] (数组), () (函数参数传递), & (取址运算) (只有“Not”可以用于字符串)
 当优先顺序相同时,则由结合律来判定运算顺序.
注意1: No shortcut logic is performed on the operands of || and &&
注意2: 混合运算不能使用这些符号(如+=, -=, *=, 等)
注意3: ','及'?:'(条件运算)不支持
变量
变量
变量的类型可以是:int, float, char, string, pointer,以及一维素注(PocketC并不支持2维以上的数组,不过可以用其他方法来代替).
局部变量必须在函数的最开始处定义.
大型数组最好定义为全局变量.
定义变量的时候可以设初始值 ,如:string days[7] = { "Sun", "Mon" };
未定义时默认值为""或0
所有变量的默认值""或0
变量名长度为31个字符.
指针
指针
指针的定义必须使用point
er,而不能使用*,如不能使用int *,PocketC可以用pointer來代替type定义类型结构.而且可以参考至某一函数.
func(int x) { return 5*x; }
main() {
pointer ptr;
int result;
ptr = func;          //参考至func函数
result = (*ptr)(7);  //由指针参考的地址去执行函数
puts("5*7=" + result);
}
顺便说明,pointer并没有指向内存的世纪地址.
语句
下列语句完全支持: for, while, do,switch,case, break, continue, if, then, return.
注意: for (;;) 是不合法的,可以用 for (;1;) 或 while (1) 来代替.
','运算不能用.
return
从例子中看看return是怎么工作的
five() {
return 5;
}
函数five 的返回值将会是 5, 我们可以在任何地方使用这个函数返回常数 5.
puts("Five is " + five()); // 输出 "Five is 5"
然而, 当返回发生时,函数不会再继续往下执行, 像这样:
five() {
return 5;
puts("这个你看不到");
}
这样我们和刚才获得同样的效果
if
lessThan5(int x) {
if (x < 5)
puts("小于5");
puts("Hello");
}
如果向这个函数传递一个小于5的数值时, 将会输出"小于5"和"Hello", 其他情况, 只会输出 "Hello".
if ... then
lessThan5(int x) {
if (x < 5)
puts("小于5");
else
puts("大于或等于5");
}
如果向这个函数传递一个小于5的数值时, 将会输出"小于5", 其他情况,这会输出 "大于或等于5"
while
count() {
int x;
x = 5;
while (x > 0) {
puts(x);
x = x - 1;
}
}
这段程序将输出 5 - 1 的连续数.
do ... while
count() {
int x;
x = 6;
do {
x = x - 1; // 可以是 x--
puts(x);
} while (x > 0);
}
这段程序将输出 5 - 0 的连续数.
for
output() {
string list[4];
int index;
list[0] = "Zero";
list[1] = "One";
list[2] = "Two";
list[3] = "Three";
for (index = 0 ; index < 4 ; index++)
puts(list[index]);
}
这段程序将输出"ZeroOneTwoThree". 数组的第一个元素的索引是0
break
count() {
int x;
x = 5;
while (x > 0) {
if (x == 1)
break;
puts(x);
x = x - 1;
}
}
输出"5432". 然而当x=1时,程序被break打断,不能继续往下运行,
当然,也可以用break来退出程序。
continue
count() {
int x;
x = 6;
while (x > 1) {
x--; // 先进行减法
if (x == 3)
continue;
puts(x);
}
}
程序输出"5421". 当x=3时, 被continue打断, 并重新进行循环.
switch statement
int    myInteger;
myInteger = 50;
switch (myInteger)
{
case    40:
case  30:    putsl("MyInteger is 40 or 30"); break;
case    50:    putsl("MyInteger is 50");    break;
default    :    puts("MyInteger is " + myInteger); 
}
说明: 如果 myInteger = 50, 将会输出 My
Integer is 50
如果myInteger=40 或 30, 将会输出 MyInteger is 40 or 30
其他情况, 将会输出 MyInteger is the 实际MyInetger的值.
函数
函数
函数可以回传任何类型的值,用'return'命令,如果沒有定义回传值则默认传回0.
局部变量必须在函数的最开始定义.
程序的入口是main(),且不能带参数.
函数无法递归数组,不过可以用指针传递來达到相同效果.
函数无法在定义前调用,也就是必须先定义后调用.
函数可以定义原型.
函数允许递归.Include引入c++中字符串数组怎么定义
使用include关键字, 可以引入文件,是你的程序变得简单.
说明: 
For WinCE, include必须使用完整路径和文件名.  WinCE不支持relative 路径.
例子
文件  MyFunctions.pc
times5(int x) {
return x*5;
}
另外一个文件:
// My Program
#include "MyFunctions.pc"
main() {
int y;
y = times5(7);
puts(y); // Prints 35
}
完整的看就像是这样:
// My Program
times5(int x) {
return x*5;
}
main() {
int y;
y = times5(7);
puts(y); // Prints 35
}
他们获得的效果是一样的。
====================================================================
特殊字符
有两种方式特殊字加入字符串內,第一种方法是用字符內码,如:(char)149,
str = "Here is a neat little square: " + (char)149;
另外的方法是使用特殊定意的字串,如下表.
特殊定義
\\          \
\'          '
\"        "
\n        换行
\r          回车
\t          跳格
\x        有2个16进制数字返回指定字符,如\x95则与十进制149相同
例:
str = "Hello,\nWelcome";
输出
====================================================================
预处理
预处理
有效的预处理命令:
#include      包含一个源代码文件
#define        定义宏
#undef        取消已定义的宏
#ifdef          如果已定义,继续编译下面的代码
#ifndef        如果没有定义,继续编译下面的代码
#else          如果前面的#ifdef或#ifndef不为真时,,继续编译下面的代码
#endif        结束一个分支预处理
注意:巨集定义不能处理参数.
程序已经定义的常数: __PKTC__, __LINE__, __FILE__
====================================================================
函数名    gets(string Text)
说明      弹出输入框,要求用户输入特定信息,
string Text 参数其实就是输入框的提示信息
例如这样 gets("你今年多大了?")
提示用户这个输入框请求用户输入年龄信息。
返回      返回一个字符串,
字符串的内容是用户在输入框中输入的内容
例子      看下面main()
{
string age;                            //定义age变量的类型是字符串
age=gets("请问你多大了?");    //使用gets(),并把返
回值放到刚才定义的字符串变量中。
//以便将来调用
puts("你以经"+age+"岁了");    //输出一些消息。
//"你以经"+age+"岁了"
//显然,“你已经”和“岁了”都是字符串
//而age我们也已经定义为字符串类型
//所以字符串的相加其实是相连
showconsole();                    //显示控制台
}
====================================================================
函数名    putsl(string Text)
说明      这个函数的作用是向控制台输出文本(Text)
在输出文本的同时进行换行。
也就是当多次使用putsl()的时候,
每一次的输出都是在不同的行上显示的。
返回      没有
例子      看下面main()
{
putsl("这是第一句");  //putsl输出
putsl("这是第二句");  //putsl输出
putsl("这是第三句");  //putsl输出
showconsole();        //显示控制台
}
====================================================================
函数名    puts(string Text)
说明      这个函数的作用是向控制台输出文本(Text)
在输出文本的同时不进行换行。
也就是当多次使用puts()的时候,
多次的输出都是在同一行的。
返回      没有
例子      看下面
main()
{
puts("这是第一句");  //puts输出
puts("这是第二句");  //puts输出
puts("这是第三句");  //puts输出
showconsole();        //显示控制台
}
====================================================================
atexit(pointer functionptr)
说明:在程序正常退出或main函数返回时(即main函数执行完毕)执行指定函数
返回:无
例子
exiting()
{
putsl("  quit()函数触发atexit()指定的函数");
sleep(2000);
putsl("  正在退出程序...");
sleep(2000);
}
main()
{
showconsole();
atexit(exiting);
putsl("已经执行完atexit()函数");
sleep(2000);
putsl("准备执行quit()函数");
sleep(2000);
quit();
putsl("这句不会输出");
}
====================================================================
devicesipinfo()
说明:返回输入法状态
返回:当返回单数,表示输入法状态为打开。当返回双数,表示输入法状态为关闭
例子
main()
{
if(devicesipinfo()/2.0!=devicesipinfo()/2)
{
alert("输入法状态:打开");
}
if(devicesipinfo()/2.0==devicesipinfo()/2)
{
alert("输入法状态:关闭");
}
}
====================================================================
runapptime(string path,int month,int day,int hour,int min)
说明:函数用于设定在某时间运行指定程序
string path:指定程序的路径
int month:
指定某时间中的"月份",1-12
int day:指定某时间中的"月份中的天",1-28,29,30,31
int hour:指定某时间中的"小时",0-24
int min指定某时间中的"分钟",0-60
返回:无
例子
main()
{
runapptime("",8,29,6,45);
alert("消息队列设置成功");
}
====================================================================
title(string title)
说明:改变程序的名称,改变后可以在显示about时的标题栏看出来
string title 标题内容
返回:无
例子
main()
{
title("看看我的标题: )");
}
====================================================================
sleep(int len)
说明:可以使程序休眠指定时间,在休眠中,CPU占用率很低。
int len 休眠时间,单位毫秒,sleep(10)==休眠0.01秒。
在消息循环中sleep(0)可以使循环中占用CPU时间降到不可察觉。
while(1){ sleep(0); }跟while(1){ }是0%跟100%的区别
返回:无
例子
main()
{
showconsole();
putsl("我数3下就退出!");
sleep(1000);
putsl("1");
sleep(1000);
putsl("2");
sleep(1000);
putsl("3");
sleep(1000);
putsl("走了! 88");
sleep(1000);
quit();
}
====================================================================
showhelp(string filepath)
说明:加载帮助文件string filepath 帮助文件完整路径。
所有在/Windows/里的帮助文档均认为在根目录。
如:有一帮助文档的路径为 windows/clndr.htm
但showhelp("windows/clndr.htm")是无法加载的;必须用showhelp("clndr.htm")。
返回:返回 1 加载成功
返回 0 加载失败
例子
main()
{
showhelp("clndr.htm#main_contents");
}
====================================================================
showabout()
说明:这个函数的作用是显示程序的程序的"关于"提示框。
返回:无
例子
main()
{
about("你看到的是程序的\"关于\"提示框");//设置"关于"的内容
showabout();//显示"关于"
}
====================================================================
shortcut(string inkpath,string filepath)
说明:在指定位置建立快捷方式
string inkpath:快捷方式的完整路径
string filepath:需要建立快捷方式的文件的完整路径
如:shortcut("/My Documents/sound.lnk","windows/alarm1.wav");
注意:
1.快捷方式的后缀是"lnk"
2.由于P.C的BUG,string filepath中不能有空格
返回:无
例子
main()
{
shortcut("/My Documents/sound.lnk","windows/alarm1.wav");
}
====================================================================
recentdoc(string path)
说明:好像是用于向"最近使用文件"菜单添加项目
但是,无论是P.C Editor的"最近使用文件"菜单
还是开始菜单的"最近使用文件"栏
都看不到任何效果!
string path:需要添加到"最近使用文件"菜单的指定程序的路径
返回:无
例子
main()
{
recentdoc("\\windows\\alarm2.wav");
}
====================================================================
quit()
说明:用于退出当前运行的P.C程序
返回:无
例子
main()
{
alert("程序即将退出");//显示提示框
quit();//退出程序
}
====================================================================
MessageBox(string text,string title,int icon,int buttons)
说明:弹出一个具有指定提示图标和指定按钮的信息提示框,
text:信息的内容
title:信息提示框的标题
icon:信息提示框使用何种图标提示
buttons:信息提示框使用何种按钮
icon的集合
普通信息(Informaation) 值 1
题问(Asterisk)      值 2
出错(Hand)        值 3
buttons的集合
确定取消(OKCANCEL)    值 1
是否(YESNO)        值 2
是否取消(YESNOCANCEL)  值 3
返回:返回值的集合
取消(Cancel)  值 -1
否(NO)      值 0
是或确定(YES) 值 1
例子
#define OKCANCEL 1
#define YESNO 2
#define YESNOCANCEL 3
#define Informaation 1
#define Asterisk 2
#define Hand 3
test(int type)
{
if(type==-1)alert("你选择了取消");
if(type==0)alert("你选择了否");
if(type==1)alert("你选择了是或确定");
}
main()
{
test(MessageBox("信息_确定取消","这里是标题",1,1));
test(MessageBox("旬问_是否","这里是标题",2,2));
test(MessageBox("出错_是否取消","这里是标题",3,3));
}
====================================================================
loadres(int resource)
说明:用于加载本地资源
int resource 本地资源编号
首先:
使用#resource 预处理
#resource int resource string filepath
int resource 本地资源编号
string filepath 要添入本地资源的文件完整路径
如:#resource 1 "Alarm1.wav"
然后:
如果在程序中需要用到本地资源石
用loadres(int resource)指向本地资源
如:wave(loadres(1),1);
返回:加载本地资源时的临时位置
例子
#resource 1 "Alarm1.wav" //添入本地资源
main()
{
wave(loadres(1),1);//加载本地资源,并使佣本地资源
putsl("加载本地资源时的临时位置:");
puts(loadres(1));//输出加载本地资源时的临时位置
showconsole();
}
====================================================================
graph_on()和graph_off()
说明:graph_on():打开图型界面
graph_off();关闭图型界面
Pocket C的界面分为图型界面和控制台
返回:无
例子
main()
{
graph_off();//关闭图型界面
puts("2秒后打开图型界面");
sleep(2000);//等待2秒
graph_on();//打开图型界面
}
====================================================================
getcurpath()
说明:获得正在执行的APP文件完整路径
返回:在执行的APP文件完整

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。