Function declarations (was: MSC v5.1 Bug???)
    T. William Wells 
    bill at proxftl.UUCP
       
    Fri Aug 26 11:06:03 AEST 1988
    
    
  
A random point on prototypes: we have the need to include
prototypes in our code while still being able to compile the code
with compilers that did not support prototypes.
The solution is this: first, all function arguments are of a type
for which the argument widening action is null.  (ints are OK,
short is not.) Second, we have, in a global include file,
something like this:
	/* Configuration section */
	#define ANSI_PROTO      /* This line would be added if the
				   compiler has prototypes.  Note that
				   just using __STDC__ is not sufficient,
				   as there are many compilers that have
				   prototypes but do not define it.  */
	/* This stuff is buried somewhere deep in the include file, the
	   person compiling our code does not look at it. */
	#ifdef ANSI_PROTO
	#define FUNC(n,p) n p;
	#else
	#define FUNC(n,p) n ();
	#endif
This is the code that makes use of the prototype macro.
	#include <our_file.h>
	FUNC(int function, (int arg1, int arg2))
What happens is that, in the default file we ship, ANSI_PROTO is
not specified and the FUNC macro will expand into something like
	extern int function();
And, since we use the right argument types, this will work on
non-ANSI or ANSI compilers.  If, however, the user *does* define
ANSI_PROTO, the FUNC macro expands to
	extern int function(int arg1, int arg2));
and he gets the type checking benefits of the prototype.
---
Bill
novavax!proxftl!bill
    
    
More information about the Comp.lang.c
mailing list