Path: utzoo!utgpu!water!watmath!clyde!att!osu-cis!killer!ames!husc6!bbn!oberon!cit-vax!beckenba From: beckenba@cit-vax.Caltech.Edu (Joe Beckenbach) Newsgroups: comp.lang.c Subject: Trigraphs and Pragmas Message-ID: <6757@cit-vax.Caltech.Edu> Date: 30 May 88 21:56:15 GMT Reply-To: beckenba@cit-vax.UUCP (Joe Beckenbach) Organization: California Institute of Technology Lines: 70 [another novice's ventures into the waters...] I've seen various unhappiness on the net with trigraphs for those who don't want to have to worry about them. I've even seen a suggestion for #trigraph [no disrespect, but UGH!] and for #define ??< \173 [strike 1: ??< not always substitutable, strike 2: \ itself needs trigraph ] Why not something like a `standard' pragma: #pragma trigraph warn about possible conversions when the programmer intended that no trigraphs were written? Note that this pragma can be ignored on C compilers which NEED trigraphs to express the language [ignored but warned about, naturally]. To add to trigraph sequences, perhaps something like: #pragma trigraph LBRACE &< to allow &< to map to { [notice &< is never legal C!] #pragma trigraph o240 o140 to mess up some character mappings by replacing all occurances of the source file character \140 [ASCII high space, national whatever] to the 8-bit character \240 [high ASCII space, national whatever #2]. With appropriate work, the preprocessor could have equivalent semantics for several different sequences mapping to characters. I intentionally am limiting myself to mappings from (n chars -> 1 char) to avoid co-opting #define; if the extension (n chars -> m chars) is allowed, the #define is a special case. For example, I might want to use the sequence @@@ to delimit certain subsections of my files, eg where I need to do more work. Then a simple remapping within the preprocessor handles this: #pragma trigraph SPACE @ Another example, the ANSI trigraphs under this syntax would become: #pragma trigraph HASH ??= #pragma trigraph BSLASH ??/ #pragma trigraph CARET ??' #pragma trigraph LBRACKET ??[ #pragma trigraph RBRACKET ??] #pragma trigraph VBAR ??! #pragma trigraph LBRACE ??< #pragma trigraph RBRACE ??> #pragma trigraph TILDE ??- or #pragma trigraph HASH o077o077o075 if ASCII and the relevant ISO character set have the same octal codings. If ASCII and the relevant ISO character standard differ in the 7-bit range, then oxxx will stand for the ASCII 7-bit coding and something like ixxx will stand for the ISO character equivalent. On related notes: 1- Where can I order the ANSI C standard? 2- Where can I find the registry of international (esp. character) standards, and also where can I get ordering information for such a body's work? 3- Who are the best people to circulate this sort of "standard #pragma" ideas, and will there be a standardized #pragma library available? [Or is that completely counter to the intention of the standards committee? Any committeemen (or Ritchie, or whoever) willing to comment?) 4- And how long until the first completely ANSI, non-pre-ANSI C will be out? [When this happens, then we all will know the transition is at hand. Of course, the wise compiler supporter will offer automatic filters to speed conversion between old and new.] -- Joe Beckenbach beckenba@csvax.caltech.edu Caltech 1-58, Pasadena CA 91125 BS E&AS (CS) 1988