【发布时间】:2018-02-05 01:50:26
【问题描述】:
我正在使用 MASM 6.14 for DOS 编写一个多模块应用程序。到目前为止,有四个 asm 文件,所有文件都在开头包含“main.inc”。此外,我启用了 /Zf 开关并强制所有符号公开。为了调用 ML.EXE,我不是单独编译每个源文件,而是使用响应文件,这样它就可以一次处理所有文件。
在包含 main.inc:
ifndef __MAIN_INC__
__MAIN_INC__ = 1
; some segment definitions here
else
echo 'This file is being included more than once!'
endif
但是它不起作用。汇编器不会显示任何警告,只有链接器会抱怨(错误 L2025:符号定义不止一次)。
似乎符号只在汇编器正在使用的当前 .asm 文件中声明。这可能是预期的行为吗?如果是这样,我怎样才能防止包含文件被多次包含?
【问题讨论】:
-
你能找到任何在 MASM 中使用包含保护的例子吗?可能是你使用的语法不是常用的。
-
在 MASM 本身中。在 \masm32\m32lib 中有一个 masm32,lib,其中包含所有源文件。
-
如果你使用
IFNDEF __MAIN_INC____MAIN_INC__ equ <1>[snip]ELSE[snip]ENDIF怎么办? -
我也试过了。它也没有工作