以问号开头的标识符的 MASM 命名约定?

MASM naming convention for identifiers beginning with a question mark?

查看BNF grammar for MASM,一个标识符可以这样命名:

The first character of the identifier can be an upper or lower-case alphabetic character ([A–Za-z]) or any of these four characters: @ _ $ ? The remaining characters can be any of those same characters or a decimal digit ([0–9]). Maximum length is 247 characters.

是否有任何 MASM(或程序集)命名约定以 ?(问号)开头的标识符?

我不知道有任何关于前导 ?s 的记录约定。但是 MASM 在扩展包含 LOCAL 标签的宏时似乎使用了两个前导问号。

这没有明确记录为约定 AFAIK,但 MASM 程序员指南在名为 "Defining Local Symbols in Macros".[=15 的部分中顺便提到了它=]


我们也可以自己写一段简单的代码来测试一下:

.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 将其用于一些预定义的特殊符号。