Lua语言中的“惊喜”
Lua在有些地方没有采用其他语言(尤其是C)的约定俗成,所以经常给程序编写者带来惊喜(surprise, “gotcha”)。根据我的经验,整理如下:
- 不等号是
~=
,而不是!=
。
- 这是我写Lua程序时最常犯的一个笔误。只能说,几乎所有的程序语言,不等号用的都是
!=
(C家族),还有一部分用<>
(Pascal, Basic, SQL)。用~=
真的只有Lua一家。
Lua在有些地方没有采用其他语言(尤其是C)的约定俗成,所以经常给程序编写者带来惊喜(surprise, “gotcha”)。根据我的经验,整理如下:
~=
,而不是!=
。!=
(C家族),还有一部分用<>
(Pascal, Basic, SQL)。用~=
真的只有Lua一家。我今天发现MinGW内置的打印函数__mingw_printf
在处理%a
格式的时候会产生不正确的输出。下面这段程序体现了这个问题。
#include <stdio.h>
#include <stdarg.h>
int main()
{
printf("%a %a\n", 1.0, 1.1);
__mingw_printf("%a %a\n", 1.0, 1.1);
return 0;
}
输出是
0x1.000000p+0 0x1.19999ap+0
0x0p-63 0x8.cccccccccccdp-3
因为浮点数1.0
显然不能表示为0x0p-63
,所以__mingw_printf
是错的。
这个错误我提交在 http://sourceforge.net/p/mingw-w64/bugs/459/ ,过几天我看看有没有人回应。
继续阅读 →