From: Ullrich von Bassewitz (uz_at_musoftware.de)
Date: 2003-07-13 12:56:57
On Sat, Jul 12, 2003 at 11:26:24PM -0700, David Holz wrote:
> .ifdef, .ifndef, .def, and .defined all seem to throw a "Error #24:
> Identifier expected" when the macro is already defined, ie:
>
> .define BLAH
> .ifndef BLAH ; <- error gets tossed here
> .define BLAH
> .endif
>
> The same error gets thrown when you try to redefine a macro, instead of a
> "Identifier already in use" type of message.
This is a misunderstanding. .ifdef/.ifndef do not work with macros, they work
with symbols:
HAVE_REU = 1
...
.ifdef HAVE_REU
...
.endif
.define creates low level macros, you should avoid it if you can. It was added
to allow emulation of features some other assembler had. Macros created with
.define do not obey scoping, and they are handled in a very early translation
phase, which means that you can do some really nasty things with them. The code
.define BLAH
defines BLAH to be replaced by nothing whenever the token is found in the
input stream. This is the reason why
.ifdef BLAH
causes an "Identifier expected" error. Since BLAH is removed, there is no
argument for .ifdef.
As said above, I would suggest to avoid the low level macros and use the high
level ones instead. They are much more predictable.
Regards
Uz
--
Ullrich von Bassewitz uz_at_musoftware.de
----------------------------------------------------------------------
To unsubscribe from the list send mail to majordomo_at_musoftware.de with
the string "unsubscribe cc65" in the body(!) of the mail.
This archive was generated by hypermail 2.1.3 : 2003-07-13 12:57:05 CEST