mod.std.c Digest V14#1
Orlando Sotomayor-Diaz
osd at hou2d.UUCP
Mon Mar 24 02:17:46 AEST 1986
From: Orlando Sotomayor-Diaz (The Moderator) <cbosgd!std-c>
mod.std.c Digest Sun, 23 Mar 86 Volume 14 : Issue 1
Today's Topics:
"address" format for printf?
__LINE__
C Standards
remainder on floats
declaring function prototypes
Forward-declaring static variables
----------------------------------------------------------------------
Date: Sat, 22 Feb 86 13:20:10 est
From: allegra!phri!roy (Roy Smith)
Subject: "address" format for printf?
To:
Whenever I want to print an address in a C program (typically as
part of a debugging display), I never know whether to use %o or %x in the
printf format specifier. Back in the pdp-11 days it was easy; you used
octal. Now, with Vaxen and 68000's and zillions of other machines running
Unix, you might want to use hex. What is actually needed is a %a which
says print this number in whatever radix is appropriate for the machine you
are running on. Let's do for addresses what %g did for floating point!
Of course, the alternatives need not be limited to octal or hex.
If some extremely demented person were to dig up an old IBM-650 and try to
port Unix to it, addresses would have to be done in decimal (I think).
------------------------------
Date: Thu, 27 Feb 86 16:52:58 EST
From: seismo!elsie!ado
Subject: __LINE__
To: cbosgd!std-c
My April 30, 1985 Draft standard has a "conceptual model" on page 5 that
breaks language processing into these successive phases (among others):
. . .
2. Each instance of a new-line character and an immediately
preceding baclslash character is deleted, splicing
physical source lines to form logical source lines.
. . .
5. The source is preprocessed. . .
Later, in discussing the preprocessor, the standard reads:
. . .The line number of the current source line is one greater than
the number of new-line characters read while processing the source
file to the current token. . .The predefined macro name __LINE__
has the value of the line number of the current source line
(a decimal constant). . .
It's unclear (to me, at least) whether the new-line characters that are
counted in determining __LINE__ are those in the physical source lines
(seen in conceptual phase 2) or those in the logical source lines
(seen in conceptual phase 5, the preprocessing phase). I'd imagine that
having __LINE__ be a physical source line number would be preferable,
but how can that be accomplished without breaking down barriers between
conceptual phases?
--
UUCP: ..decvax!seismo!elsie!ado ARPA: elsie!ado at seismo.ARPA
DEC, VAX and Elsie are Digital Equipment and Borden trademarks
------------------------------
Date: Wed, 12 Feb 86 09:35:27 pst
From: uw-beaver!ssc-vax!zadco at ihnp4.uucp (Rick Fairfield)
Subject: C Standards
To: cbosgd!mark at ihnp4.uucp
I need to find a set of standards (formal or otherwise) for programming
in C. Does anyone have or know of any such standard?
thanx,
Rick Fairfield
Boeing Aerospace
206-773-1004
...ssc-vax!zadco
------------------------------
Date: Wed, 22 Jan 86 15:16:07 EST
From: Doug Gwyn <gwyn at BRL.ARPA>
Subject: remainder on floats
To: std-c%cbosgd.uucp at BRL-TGR.ARPA
> I was surprised to discover that the C language does not define the
> remainder operation (%) on floats. It's certainly clear that this is
> useful (ever do argument reduction for transcendentals?) and there
> are good definitions of it, e.g. in the IEEE float spec. Is this
> just a historical problem (e.g. the PDP-11 didn't have the instruction
> so it's not in C) and is this likely to get fixed by the standard?
> I too once wondered about this until Ron pointed out to me
> that there IS no remainder when you divide one real number
> by another.
Last time I looked, X3J11 included the fmod() function,
which is probably what you want. If the compiler is able
to generate an in-line expansion for this rather than a
function call, I suppose that would be permitted.
------------------------------
Date: Fri, 7 Mar 86 00:42:20 PST
From: jon at csvax.caltech.edu (Jonathan P. Leech)
Subject: declaring function prototypes
To: cbosgd!std-c
An off-the-wall proposal: C++ allows functions with the same name
but different arguments; i.e.
pow(double,int) and
pow(int,int)
can be distinguished by their argument types. How about adding a
capability like this to the pre-processor, with the difference that
the only criteria for overloading a #define is the NUMBER of
arguments to a macro; i.e.
#define SUM(a,b) ((a) + (b))
#define SUM(a,b,c) (SUM(a,b) + (c))
This just occured to me while I was trying to come up with an easy
way of declaring function prototypes so I could put them in now to be
ignored but by changing one #define when ANSI compilers are finally
available have them operational; something like
#ifdef ANSI
#define DECL(func) func()
#define DECL(func,a1) func(a1)
#define DECL(func,a1,a2) func(a1,a2)
/* etc. */
#else
#define DECL(func) func()
#define DECL(func,a1) func()
#define DECL(func,a1,a2) func()
/* etc. */
#endif
extern double DECL(sqrt, double);
extern FILE * DECL(freopen, const char *, const char *, FILE *);
Of course this isn't possible with current compilers ('argument
mismatch'), but it might be nice to have this capability anyway. As
far as I can tell it won't break existing code.
-- Jon Leech (jon at csvax.caltech.edu)
__@/
------------------------------
Date: Wed, 19 Mar 86 00:40:48 pst
From: Nathan C. Myers <hp-pcd!orstcs!nathan>
Subject: Forward-declaring static variables
To: cbosgd!std-c
The following has been a portability problem in C; I don't see it addressed
in the draft standard. Suppose you want to initialize a state table with
circular references, and want the table entries declared static.
For example:
struct entry { struct entry *next; int i; };
static struct entry e1 = { &e2, 0 };
static struct entry e2 = { &e1, 1 };
The first initialization will fail, as e2 hasn't been seen
yet. We need to "forward" declare e2 without defining it. But how?
Putting an "extern" on would prevent definition, but would conflict
with the "static" later on (at least according to the ANSI C draft).
Calling them static in the forward-declaration would define them too.
Do we need a special-case here (e.g. static overrides earlier extern)?
If so, the standard should say so -- otherwise implementors will
make their own merry mess of it.
Nathan C. Myers hplabs!hp-pcd!orstcs!nathan nathan at oregon-state
------------------------------
End of mod.std.c Digest - Sun, 23 Mar 86 11:10:03 EST
******************************
USENET -> posting only through cbosgd!std-c.
ARPA -> ... through cbosgd!std-c at BERKELEY.ARPA (NOT to INFO-C)
In all cases, you may also reply to the author(s) above.
More information about the Mod.std.c
mailing list