binary constants (??)

Chris Torek chris at mimsy.umd.edu
Mon Nov 20 05:21:00 AEST 1989


One of my favourite silly ideas for C is now ruled out by X3J11's
`#' `stringize' preprocessing operator (or at least, would require
some other syntax), but it went like this:  Instead of having hex,
decimal, octal, binary, etc., constant syntaxes, why not have a
single syntax for `based numbers'?  The initial radix would always
be decimal; the format would be something like

	#(base,expr)

Numbers in the `expr' part would be interpreted in the base given by
the `base' expression.  Any value from 2 to 36 would be legal for the
base.  All `numbers' would be of the form

	[0-9][0-9a-zA-Z]*

where ordinary digits represent themselves and letters represent digits
>= 10 in the obvious manner.  (Whether digits greater than the base
would be legal is essentially irrelevant.)

The sneaky (or silly) bit is that both `base' and `expr' would be
arbitrary constant expressions.  This would be useful for obfuscation
such as

	#(3+#(2,#(6,13)-0010),#(5,11)/30)

which is actually 1.

(I think.)

Whether the base is always decimal is an unresolved question.  (Bases
that are part of the base-forming expression are definitely decimal,
but bases that are part of the based-expression---the stuff to the
right of the comma---might start in the base determined by the thing
to the left.  This would probably be a bad idea, since macro expansion
would yeild unpredictable results if the base part were multi-digit.
Of course, this would be even better for obfuscatory purposes.)
-- 
In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7163)
Domain:	chris at cs.umd.edu	Path:	uunet!mimsy!chris



More information about the Comp.lang.c mailing list