【问题标题】:MASM include guards not workingMASM 包括不工作的警卫
【发布时间】: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 怎么办?
  • 我也试过了。它也没有工作

标签: assembly include masm


【解决方案1】:

通常情况下,条件会在必要时在 INC 文件中进行测试和声明

#ifndef __MAIN_INC__
#define __MAIN_INC__

 .... Whatever needs to be here

 #endif

这并不意味着它不能在外面进行测试,但这是避免多重包含的最常见方法。

【讨论】:

  • 条件在INC文件中声明,我编辑了问题以使其清楚。
  • 仅使用#define __MAIN_INC__ 会将其设置为非零。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
相关资源
最近更新 更多