Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1 6/24/83; site umcp-cs.UUCP
Path: utzoo!watmath!clyde!burl!ulysses!allegra!mit-eddie!genrad!wjh12!talcott!harvard!seismo!umcp-cs!chris
From: chris@umcp-cs.UUCP (Chris Torek)
Newsgroups: net.lang.c
Subject: Re: Function pointer syntax peculiarity
Message-ID: <1461@umcp-cs.UUCP>
Date: Thu, 29-Nov-84 16:29:12 EST
Article-I.D.: umcp-cs.1461
Posted: Thu Nov 29 16:29:12 1984
Date-Received: Sat, 1-Dec-84 06:48:46 EST
References: <396@ucsfcgl.UUCP>
Organization: U of Maryland, Computer Science Dept., College Park, MD
Lines: 44

I think this has been mentioned before.  PCC accepts almost anything as
a function.  Try

	f(g)
	int (*g)();
	{
		(**********g)(1);
	}

for example.

I personally think it makes perfect sense to say

	f(g)
	int (*g)();
	{
		g(1);
	}

but this breaks the nice consistency between the way a variable is
declared and the way it is used.  (It makes sense since a function
name by itself is a pointer to that function; that is, I write

	main()
	{
		int (*f)();
		int foo();

		f = foo;	/* &foo is wrong */
		foo(6);
		(*f)(6);	/* but f(6) is wrong too */
	}

If & and * are inverses, I should be saying either "f = &foo" or
"f(6)", and I should be able to say "(*(&foo))(6)".)

However, "(*f)()" is correct, and it's a bug/feature that
PCC accepts other forms.
-- 
(This line accidently left nonblank.)

In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (301) 454-7690
UUCP:	{seismo,allegra,brl-bmd}!umcp-cs!chris
CSNet:	chris@umcp-cs		ARPA:	chris@maryland