冒泡开发实验系统使用注意事项
2012/1/13 12:56:00 (2765) 编程技术 1.定义了返回值类型就必须正确返回int xx()
{ }
这样的函数在moc1.5里完全正常,但在实验系统里就会造成程序出错。原因是函数开头的int表示它将返回一个整数,但是实际上它什么也没有返回。
正确的写法应该是这样的:
int xx()
{ return 0; }
或者这样
void xx()
{ }
void表示函数没有返回值。
2.文件*作和头文件引用的根目录是mythroad
与moc1.5不同,实验系统的文件*作不再限定在c文件夹内,而是整个mythroad目录(如果你从存储卡目录运行实验系统,那么它可以*作整个存储卡内的文件)。同样的,自定义的头文件(*.h)的引用也必须写基于mythroad目录的路径,比如引用mythroad/c/a.h,必须写成
#include “c/a.h“
你看到的““实际上是英文双引号,被论坛给替换了。另外*作是cao作。
3.返回值类型不能为自定义类型指针
返回值类型除了不能为结构体之外,也不能直接定义为结构体指针。比如
typedef struct {
int a;
int b;
} ab;
ab* myab()
这样会出错。正确的方法是定义为void*
void* myab()
这样你依然可以正常返回一个结构体指针。
4.强制类型转换只支持基本类型
(*)a
(int)a
(**)a
(int*)a
(void*)a
只支持这五种形式((void**)之类的没测试过)。不要写 (uint32)a 之类的,更不要写自定义类型。要转换为自定义类型指针,只要转成void*就可以了。
你看到的(*)a是(c h a r)a,(**)a是(c h a r*)a,真是意想不要的敏感词替换!
5.函数的定义可以在调用之后。
与armcc编译器不同,实验系统并不要求函数的定义必须在调用之前。你完全可以把一个函数定义在最后面,但在前面调用它。
6.typedef和全局变量必须定义在使用之前
虽然宏、typedef、结构体、枚举和全局变量的定义可以出现在任何地方,比如两个函数之间,但是与函数不同,它的定义必须在使用之前。因此建议在代码的最开始定义它们。
7.函数内部的static变量有效
帮助中说static关键字会被无效化,其实仅仅是指文件作用域无效(全局变量加static表示它具有文件作用域,只在当前文件可见)。经测试,函数内部的static静态变量可以正常使用。
8.正确地使用struct关键字
一个结构体可以用这种方式定义:
struct mymt
{……};
这样,无论任何时候想使用这个结构体,都必须写成struct mymt,它们是一个整体(例struct mymt *a)。
但有时候,一个结构体是这样定义的:
typedef struct {
uint8 r;
uint8 g;
uint8 b;
} colorst;
这时,你不必加上struct关键字。
只有写成colorst *a才是正确的。
9.结构体指针可以做为函数的参数(void myfunc(colorst *a, struct mymt *b)是可以的),如果你不能,请确认你没有拼写错误,并参考6和8,并且注意别忘了*,因为结构体不能做参数。
10.定时器可以接受一个**类型的变量做为回调函数名。
c h a r*类型……bs论坛的敏感词替换!