|
Flash也支持#define预处理
看到as3在flex b2下已经有了支持预处理的工具...eclipse的框架就是这点好~~ 其实Mike Chambers 早在去年差不多这个时候就提出来了....方法还是蛮巧妙的,说bt比较适合-__-....差不多就是用c/c++编译器,把写好的as文件滤一遍....发现老外的脑子确实动的快,这也和他们对知识的整个框架熟悉有关...唉....扯远了#_# flash本来也就支持预处理的,比如
#include #initclip #endinitclip 第一个,用的必较多,特别是2k4以前 后面两个嘛.MX里面常用来做组件...2k4以后就淘汰了(实际上是必用的,不过我们写的时候不太用就是了) 然后像c/c++里面,其它强大的预处理功能.就没有了 最常用的就是
#define #ifdef #endif .... 现在嘛,可以用这个技巧也让as支持一把,:>
首先也去找个c/c++编译器.一般就是gnu,免费的么,这里下,30M多 http://directory.fsf.org/gcc.html 接着解压好像就能用了,还是要安装我也不清楚,反正不复杂的...我机器里面是以前装了个dev-cpp所以一起帮偶搞定了 好了应该有个bin文件夹,里面有个cpp.exe,用的就是它
了解c/c++的就方便了,和我一样不懂的也没关系,只要学会上面说到的#define,#ifdef,#endif就很有用了 比如
function Test() { #ifdef DEBUG trace("this is a test"); #endif } 保存文件为 test.p (后缀名基本随意) 保存到bin下面 然后cmd下 cpp -D DEBUG -P test.p test.as 后bin下面就会生成一个test.as,自己打开看看,会发现没有了预处理命令,只保留了trace 再试试 cpp -P test.p test.as 会看到trace都没了 这样子,就不会在一些程序里面老多一步无聊的 if(_global.G_DEBUG)运算了 然后#define
#define SIZE 10 var a :Array = new Array(SIZE); for(var i=0; i<SIZE; ++i) a[i] = i; 还是老样子 cpp -P test.p test.as 会发现SIZE的地方都被10代替了..其实#define就是命令行里面的-D 如果你觉得命令行里面输入烦 就可以在之前的文件里面 #define DEBUG ,这样就可以在命令行里去掉-D DEBUG,而又程序文件来控制是否定义DEBUG -P是告诉cpp不要在生成文件内插入行符. 还要说明,如果用cpp滤一下的话,所有注释都没了,要保留注释,需要加一个 -C 这里提到的参数都是大小写敏感的,也就是说都要大写 最后提一下,flash本身支持的3个预处理#include..巧了.cpp里面也是有的,而且作用和flash差不多,所以flash里面如果有#include的话..cpp后的生成文件会把#include的文件编译好后一起放入生成文件内 而另外两个c/c++里面没有,所以如果程序文件里面有的话,cpp会报错,不过我想现在估计不太可能再有人用了 看一下下面的范例程序,里面定义的Max实在是比较搓....如果在class里面不定义成dymanic的还会报错...这里只想说一下这么定义也是可以的=_=
#define SIZE 10 #define Max(x,y) ((x)>=(y)?(x):(y)) //--- Main ---- var a: Array = CreateArray(); #ifdef DEBUG trace(a); #endif Bubble(a); #ifdef DEBUG trace(a); #endif //------------- function Bubble(a: Array): Void { for(var i=0; i<a.length-1; ++i) { for(var j=i; j<a.length; ++j) { if(Max(a[i],a[j]) == a[j]) // a[j] > a[i] { var tmp = a[j]; a[j] = a[i]; a[i] = tmp; } } } } function CreateArray(): Array { var arr: Array = new Array(); for(var i=0; i<SIZE; ++i) { arr[i] = random(SIZE); } return arr; }
cpp -P -C test.p test.as 嗯.记得ox以前抱怨起flash没有预处理,现在好了,虽然不能说就可以像c/c++那样了.不过至少还是有很不错的表现.但估计他早去玩c++了~~~ 另外如果对预处理或者cpp想了解更多的看这里 http://gcc.gnu.org/onlinedocs/cpp/
不知道这东西是不是古老了...搞不好我又做了次火星人...唉..想想人家老外一年前就提出来了,又想起来,前两天才刚知道flash里面如何支持浏览器的back button这是人家2001年就提出来的啊...真是郁闷要死
|