[comp.std.c] New cpp predefines for POSIX/ANSI C

jimb@hpfcdc.HP.COM (Jim Bigelow) (02/23/89)

I'm looking for comments and consensus of a suggestion for POSIX and
ANSI C conforming equivalents of cpp predefines.  The table below shows
the existing redefined cpp symbols and POSIX/ANSI equivalents with any
discussion.

	Existing 	POSIX/ANSI C 		Discussion
      ------------------------------------------------------------------
	unix		__unix		I see this symbol as being
                                        used to distinguish between
                                        code for different operating
                                        systems.  As such, it would be
                                        very useful when porting if
                                        all implementations agree on a
                                        common POSIX/ANSI C equivalent.     
	mert		__mert
	ibm		__ibm
	gcos		__gcos
	tss		__tss
	etc.

	interdata	__interdata
	pdp11		__pdp11
	u370		__u370
	u3b		__u3b
	u3b5		__u3b5
	vax		__vax
	etc.

	RES		_RES
	RT		_RT
	TS		_TS
	PWB		_PWB
	etc.

Since lint(1) defines the preprocessor symbol lint when it runs cpp, I
don't think that lint should be transformed to __lint --  any comments?

Jim Bigelow
Colorado Language Lab, M.S. 96
Hewlett Packard
3404 E. Harmony Rd.
Ft. Collins, CO  80525
303-229-6251
... !hplabs!hpfcrt!jimb

flaps@dgp.toronto.edu (Alan J Rosenthal) (02/24/89)

In article <12040014@hpfcdc.HP.COM> jimb@hpfcdc.HP.COM (Jim Bigelow) writes:
>Since lint(1) defines the preprocessor symbol lint when it runs cpp, I
>don't think that lint should be transformed to __lint --  any comments?

I think it should.  The advantage of not intruding in the user's name space is
just as great when they're writing programs that they intend to lint as it is
when they're writing programs that they do not intend to lint.  (Besides, one
should intend to lint all programs anyway.)

The current lint documentation says:
    The preprocessor symbol "lint" is defined, in order to allow certain
    questionable code to be altered or removed for lint.  Therefore, the symbol
    "lint" should be thought of as a reserved word for all code that is planned
    to be checked by lint.
    [Sun unix 3.5 man lint(1)]

In my opinion this is a wart, at least these days if not in the first place.
Get rid of it.

To put it another way, people writing portable C programs should be able to
lint them without having to write lint-ized C programs.  Having to treat
``lint'' as a reserved word is writing a lint-ized C program.

ajr

--
"The goto statement has been the focus of much of this controversy."
	    -- Aho & Ullman, Principles of Compiler Design, A-W 1977, page 54.

jagardner@watmath.waterloo.edu (Jim Gardner) (02/25/89)

[...]

Our group at the University of Waterloo maintains a number
of C compilers, and we have found the following scheme useful.

We have two classes of definitions: machines and operating systems.
This copes with the problem of machines that support several
operating systems (e.g. PORT, DOS, XENIX on the PC) or operating
systems that run on many different machines (UNIX on many kinds
of hardware).

We further differentiate between the HOST system (where the program
is being compiled) and the TARGET system (where the program will
run).  This takes care of problems that may arise during cross-compilation.

As a result, we have four sets of manifests, each beginning with
a different prefix:

	_TS_   target operating system
	_TM_   target machine
	_HS_   host operating system
	_HM_   host machine

This gives us a set of definitions like:

	_TS_UNIX
	_TM_I80286
	_TS_GCOS8_NS
	_TS_GCOS8_SS
	/* etc. */

By the way, I put in the last examples to point out that "__gcos" is
not a good name.  Off the top of my head, I can think of GCOS-III
(which ran an old Bell C compiler), GCOS-6 (runs on Bull DPS-6 minis),
GCOS-7 (runs on Bull DPS-7 mainframes, and utterly different from
any other operating system I've ever seen), and GCOS-8 (running on
Bull DPS-8, DPS-8000, DPS-88, and DPS-90 machines, in two different
modes that have entirely different sets of service calls).  Bull
calls all its operating systems GCOS, despite vast differences between
them.

		Jim Gardner, University of Waterloo