【问题标题】:MASM naming convention for identifiers beginning with a question mark?以问号开头的标识符的 MASM 命名约定?
【发布时间】:2020-08-28 17:03:42
【问题描述】:
看BNF grammar for MASM,一个标识符可以这样命名:
标识符的第一个字符可以是大写或小写
字母字符 ([A–Za-z]) 或以下四个字符中的任何一个:@ _ $
?其余字符可以是任何相同的字符或
十进制数字 ([0–9])。最大长度为 247 个字符。
对于以?(问号)开头的标识符是否有任何 MASM(或程序集)命名约定?
【问题讨论】:
标签:
assembly
naming-conventions
masm
【解决方案1】:
我不知道有任何记录在案的前导 ?s 约定。但 MASM 在扩展包含 LOCAL 标签的宏时似乎使用了两个前导问号。
这在 AFAIK 中没有明确记录为约定,但 MASM 程序员指南在名为 “在宏中定义本地符号”的部分中顺便提到了它。
我们也可以自己写一段简单的代码来测试一下:
.686
.model flat,stdcall
option casemap:none
FOO MACRO
LOCAL local_to_foo
local_to_foo:
ENDM
.code
start:
FOO
FOO
END start
如果我们告诉 MASM 为此生成一个列表文件(使用 /Fl 选项),代码部分的列表将如下所示:
00000000 .code
00000000 start:
FOO
00000000 1 ??0000:
FOO
00000000 1 ??0001:
END start
底线是,作为程序员,最好不要在标识符中使用前导问号,就像 MASM 程序员指南建议你不要使用前导 @ 字符,因为 MASM 将其用于一些预定义的特殊符号.