找回密码
 点一下
查看: 2195|回复: 23

原来YDWE可以这样用...(这是cjass的功能?)

[复制链接]
发表于 2012-10-15 12:30:23 | 显示全部楼层 |阅读模式
本帖最后由 lia77593 于 2012-10-15 12:33 编辑


本来是在使用hashtable的时候需要的两个参数,子key我都是用
constant integer 来定义的
比如
[jass]
constant integer ATTACK = 1
[/jass]
有一次闲来无事,把一段触发转换为文本,发现了这样的东西
[jass]
#ifdef DEBUG
    call YDWESaveTriggerName(gg_trg_Nova, "Nova")
#endif
[/jass]
这#预处理命令不是C语言吗?于是我就尝试了其他的预处理命令
#include这种命令是不可能有的,#typedef 也是没有反应,剩下的就只有#define
一试,果然能够用
[jass]
#define ATTACK 1
[/jass]
倘若只用来定义常数实在是太大材小用了,我于是又用来定义函数的别名
以前的写法是这样的
[jass]
function GTU takes nothing retunrs unit
retunr GetTriggerUnit()
endfunction
[/jass]
有了预处理命令就不要这么麻烦了,直接
#define GTU GetTriggerUnit
还有的一个用处就是这样用
#define loc local location
#define int loca integer
这样定义之后,声明变量是总算能和c语言一样了,直接
[jass]
loc l = null
int i = 1
[/jass]
这样减少了大量的输入量啊,所以拿出来和大家共享下
 楼主| 发表于 2012-10-15 12:41:41 | 显示全部楼层
不过使用这种命令要注意的是,不要这样写
#define real local real
这种命令的实质是将所有的real换成local real
同理的是,你的变量不要在使用这些预定义的名字,因为会发生替换
好像用这种方法为函数取短名能加快效率(我也不知道是不是真的)
回复

使用道具 举报

发表于 2012-10-15 12:42:50 | 显示全部楼层
看不懂.
回复

使用道具 举报

 楼主| 发表于 2012-10-15 12:48:39 | 显示全部楼层
本帖最后由 lia77593 于 2012-10-15 13:08 编辑

事实上,#include也是可以用的,但是我不知道YDWE使用的是YDTrigger目录的文件,那也就是说
以后我们做系统的时候,只需要把这些东西用记事本保存好,改后缀名为.h
再使用#include命令就可以讲别人的代码给一下加进来了,这是多么的好啊
事实上讲头文件放到YDWE目录下YDTrigger目录
再使用#include <YDTrigger/XXXX.h>
这样写的系统可以直接使用#include命令,但是了可能会出现变量名相同的情况
这个时候好像要使用VJASS(YDWE带了)
就可以使用library对整个系统进行限定修饰
使用private 对变量进行私有修饰
难道这就是传说中的代码重复利用吗?
回复

使用道具 举报

发表于 2012-10-15 13:24:04 | 显示全部楼层
你这真有点火星。很久以前的各种包装版本jass就有这些功能啊。

不过说到底,最后生成的文件还是最普通的jass文件。方便写的人而已。
回复

使用道具 举报

发表于 2012-10-15 13:27:30 | 显示全部楼层
http://cjass.xgm.ru/

想要了解cJass可以看这个网站。

点评

确实火星了 以前都没接触过了 谢谢头目指点  详情 回复 发表于 2012-10-15 13:36
回复

使用道具 举报

 楼主| 发表于 2012-10-15 13:36:07 | 显示全部楼层
麦德三世 发表于 2012-10-15 13:27
http://cjass.xgm.ru/

想要了解cJass可以看这个网站。

确实火星了
以前都没接触过了
谢谢头目指点
回复

使用道具 举报

发表于 2012-10-15 13:41:10 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2012-10-15 14:09:54 | 显示全部楼层
和c语言木有两样,好像还是有点区别
2.7  Endline manipulation
      unit u; u = CreateUnit( Player(pIndex),  \
                  GetRandomInt('H000', 'H009'),\
                  GetRandomReal(-100, 100),    \
                  GetRandomReal(-100, 100),    \
                  GetRandomReal(0, 360))
本人英语很不好了...
c语言是不要这个 \的把
##连接还可以这样用啊
CreateUnit(p, id) = Create##Unit(p, id, 0, 0, 0)
Enumerations这个是没太懂(自己的c语言书刚看到这)
6.3.2  Format string这个倒是很好用啊
回复

使用道具 举报

发表于 2012-10-15 14:26:32 | 显示全部楼层
Enumeration是枚举。

简单来说就是用方便的名字来替代0 1 2 3
回复

使用道具 举报

发表于 2012-10-15 15:27:44 | 显示全部楼层
说两点
1 YDWE的确实是和c语言的完全一致,注意我说的是“完全一致”,严格来说是完全符合c99标准的预处理语法。
2 跟cjass没有关系,如有雷同,纯属cjass在模仿c语言。

点评

大神,我是打的是疑问号,我是在想这东西是YDWE本身实现的还是YDWE带的cjass实现的..  详情 回复 发表于 2012-10-15 19:28
回复

使用道具 举报

发表于 2012-10-15 15:53:42 | 显示全部楼层
我没有讲你的工具就是用的cJass。只是说这种预处理在很久以前就常见于各种包装版本jass而已。cJass算是其中比较靠谱的一种。

楼主标题括号里的内容其实是在我回帖之前就加了。发语法手册更多是让他了解异同。
回复

使用道具 举报

发表于 2012-10-15 18:47:29 | 显示全部楼层
喵呜 原版的小J不是很萌了么 你们这些不知足的花公子 负心汉!

点评

小白可以吃,很好玩~  详情 回复 发表于 2012-10-16 03:11
回复

使用道具 举报

发表于 2012-10-15 18:55:20 | 显示全部楼层
Conflux 发表于 2012-10-15 18:47
喵呜 原版的小J不是很萌了么 你们这些不知足的花公子 负心汉!

可是小C也素非常口耐的~~

点评

发现野生的希瓦,这里是水区  详情 回复 发表于 2012-10-16 03:10

评分

参与人数 1印象 +4 收起 理由
Conflux + 4 你这样说显得我很没有男子气概啊啊啊

查看全部评分

回复

使用道具 举报

发表于 2012-10-15 18:57:56 | 显示全部楼层
唉,不懂电脑语言的压力大……最近在玩无冬之夜不是2,打开编辑器之后一堆语言……不知道是不是C,反正开头有main……压力大啊……

点评

那是ccccccccConflux++  详情 回复 发表于 2012-10-16 03:11
回复

使用道具 举报

 楼主| 发表于 2012-10-15 19:28:24 | 显示全部楼层
actboy168 发表于 2012-10-15 15:27
说两点
1 YDWE的确实是和c语言的完全一致,注意我说的是“完全一致”,严格来说是完全符合c99标准的预处理 ...

大神,我是打的是疑问号,我是在想这东西是YDWE本身实现的还是YDWE带的cjass实现的..

点评

我不是回答得很清楚了  详情 回复 发表于 2012-10-16 11:31
回复

使用道具 举报

发表于 2012-10-16 03:10:48 | 显示全部楼层
希瓦 发表于 2012-10-15 18:55
可是小C也素非常口耐的~~

发现野生的希瓦,这里是水区
回复

使用道具 举报

发表于 2012-10-16 03:11:01 | 显示全部楼层
Conflux 发表于 2012-10-15 18:47
喵呜 原版的小J不是很萌了么 你们这些不知足的花公子 负心汉!

小白可以吃,很好玩~
回复

使用道具 举报

发表于 2012-10-16 03:11:20 | 显示全部楼层
lo 发表于 2012-10-15 18:57
唉,不懂电脑语言的压力大……最近在玩无冬之夜不是2,打开编辑器之后一堆语言……不知道是不是C,反正开头 ...

那是ccccccccConflux++
回复

使用道具 举报

发表于 2012-10-16 11:31:37 | 显示全部楼层
lia77593 发表于 2012-10-15 19:28
大神,我是打的是疑问号,我是在想这东西是YDWE本身实现的还是YDWE带的cjass实现的..

我不是回答得很清楚了

点评

可是我要死不开YDWE的cjass编译选项直接 这样写 (#define 完全符合C语言语法) void test(){ } 为什么会报错了? 报错内容是 include improt.h  详情 回复 发表于 2012-10-16 14:26
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-9-28 07:28 , Processed in 0.247790 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表