ca65: Include Guard генерирует сообщение "Ошибка: ожидается идентификатор"
Пытаясь научиться использовать ассемблер ca65, я боролся с тем, чтобы заставить работать охрану включения. Поиск в Google и чтение руководства пользователя 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
Что мне не хватает?
1 ответ
Решение
Немного сбивает с толку .ifndef
и друзья применяются к символам, которые не являются макросами (.define
определяет макрос). Таким образом, возможное обходное решение - использовать символ, например
.ifndef _65_INC_
_65_INC_ = 1
.define NUMBER 1
.endif