试图学习如何使用ca65汇编程序,我一直在努力使 include guards 起作用。谷歌搜索和阅读 ca65用户指南并没有帮助。这是一个产生错误的最小示例。
$ ls -l
total 16
-rw-r--r-- 1 me staff 60 Oct 22 19:40 65.inc
-rw-r--r-- 1 me staff 55 Oct 22 20:01 test.s
$
$ cat 65.inc
.ifndef _65_INC_
.define _65_INC_
.define NUMBER 1
.endif
$
$ cat test.s
.include "65.inc"
.include "65.inc"
lda #NUMBER
rts
$
$ ca65 test.s
65.inc(1): Error: Identifier expected
65.inc(2): Error: Identifier expected
65.inc(4): Error: Identifier expected
65.inc(4): Note: Macro was defined here
$
$ ls -l
total 16
-rw-r--r-- 1 me staff 60 Oct 22 19:40 65.inc
-rw-r--r-- 1 me staff 55 Oct 22 20:01 test.s
$
如果我仅将65.inc
中的test.s
包括在内,则它会毫无问题地组装,如下所示:
$ ls -l
total 16
-rw-r--r-- 1 me staff 60 Oct 22 19:40 65.inc
-rw-r--r-- 1 me staff 37 Oct 22 20:07 test.s
$
$ cat 65.inc
.ifndef _65_INC_
.define _65_INC_
.define NUMBER 1
.endif
$
$ cat test.s
.include "65.inc"
lda #NUMBER
rts
$
$ ca65 test.s
$
$ ls -l
total 24
-rw-r--r-- 1 me staff 60 Oct 22 19:40 65.inc
-rw-r--r-- 1 me staff 295 Oct 22 20:07 test.o
-rw-r--r-- 1 me staff 37 Oct 22 20:07 test.s
$
$ ca65 --version
ca65 V2.17 - Git 153bb29
我想念什么?
答案 0 :(得分:7)
有些令人困惑的.ifndef
和朋友适用于符号,而这些宏不是(.define
定义了宏)。因此,可能的解决方法是使用符号,例如
.ifndef _65_INC_
_65_INC_ = 1
.define NUMBER 1
.endif