Prototypes for macros?

Mike Percy grimlok at hubcap.clemson.edu
Sat May 5 03:26:03 AEST 1990


>From article <1990May4.162637.29981 at laguna.ccsf.caltech.edu>, by gleeper at tybalt.caltech.edu (Evan Manning):
] dan at kfw.COM (Dan Mick) writes:
] 
]>In article <1990May3.202403.10140 at laguna.ccsf.caltech.edu> gleeper at tybalt.caltech.edu (Evan Manning) writes:
]>>I ran into an interesting situation yesterday playing with my brand
]>>new Turbo C 2.0.  I was trying to use it with all warnings and errors
]>>enabled, as I'd heard it claimed that this obviated all need for lint
]>>(At my previous job I got quite attached to PC-Lint from Gimpel but now
]>>it's my money so I thought I'd at least give Turbo a chance.)
]>>
]>>The problem emerged when I tried to use some functions (randomize &
]>>random) which are defined as macros in the headers.  TC gave me a
]>>'no prototype in scope' warning and then some other error message I
]>>don't recall when I disabled the prototype warning.  All problems
]>>vanished when I slavishly copied the definitions of the macros from
]>>the header.
]>>
]>>Is it a bug?  Should macros have prototypes too?  Will I have to worry
]>>about putchar et al?
] 
]>Erm...if you had included the header, there wouldn't have been a warning,
]>since, after it was preprocessed, there would be no "function" randomize()
]>or random() to complain about.
] 
]>#include <stdlib.h>
] 
] I guess I should have mentioned that I'm not a rank amateur.  All
] appropriate headers were included (including time.h for seeding off
] the time in randomize()) and these are the precise same headers needed
] to avoid warnings after manually expanding macros.  My guess is that
] Turbo is checking for prototypes *before* expanding macros.  Which
] sounds wrong to me.  Has anybody encountered this before?

Are you compiling with the -A flag set?  The one that compiles in STDC
mode?  If so, a lot of the stuff in the header files is _not_ included,
because it's not allowed to be there (by the ANSI standard).  Check to
see if the functions you are having prototype problems with are being
excluded by a #if !__STDC__ test.           

Prototyping has saved me lots of work hunting things down, so I use it
heavily, and have not had any problems.  But I haven't compiled under
STDC settings.



More information about the Comp.lang.c mailing list