[关闭]
@wz520 2015-10-06T11:07:16.000000Z 字数 699 阅读 2047

有C语言基础的人初学AHK时应该注意的几点

AHK AutoHotkey C语言


AHK的表达式语法很像C,但是跟C还是有很多不同点的,不要觉得像C的地方可以完全像C一样用。以下列出我在使用过程中碰到过的不同点:

/*...*/

这在 C语言 和其他多数 类C语言(如 C++、Java、JavaScript……)中是块注释,但是在AHK中是多行注释。

这有什么区别呢?

比如,在 C/C++ 中你可以这样:

  1. int c=/*abc*/123;
  2. printf("%d", c);

这里 abc 是注释,编译时会把 /*abc*/ 替换成 空格,其他照常编译。

而 AHK 中如果你写成这样:

  1. a=/*a*/3
  2. MsgBox % a

这不会报错,只是 MsgBox 会显示 /*a*/3
因为在AHK中 /**/ 两个注释符必须出现在行首。如果不是,则不会被认为是注释符。

等号相关

在 AHK 的表达式中, := 是赋值,=是比较。
而在 C 里面,=是赋值,==是比较。
而 AHK 也有==运算符,这是精确比较。

大括号

AHK 的{必须出现在行尾,而}必须出现在行首。而且貌似在很多 if 开头的命令中{只能单独占一行。不像 C语言 那么随便。

if表达式

AHK 的 if(表达式) 之后的语句必须换行。比如:

  1. if(a=3)
  2. b=4

不能这样

  1. if(a=3) b=4

不过部分 if 开头的命令(比如 IfEqualIfInString),如果之后只跟一句命令(不是表达式)的话,可以写在一行里:

  1. IfInString, str, name, GoSub, nameproc

相当于

  1. IfInString, str, name
  2. GoSub, nameproc

但是要注意这里的 GoSub 是 AHK 的命令,而不是表达式,如果是表达式,就不能写在一行上。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注