Thread View: mod.std.c
1 messages
1 total messages
Started by Orlando Sotomayor-Diaz
Sat, 11 May 1985 14:52
mod.std.c Digest V6#7
Author: Orlando Sotomayor-Diaz
Date: Sat, 11 May 1985 14:52
Date: Sat, 11 May 1985 14:52
120 lines
4858 bytes
4858 bytes
From: Orlando Sotomayor-Diaz (The Moderator) <cbosgd!std-c>
mod.std.c Digest Sat, 11 May 85 Volume 6 : Issue 7
Today's Topics:
Pointer arithmetic and function pointers (4 msgs)
----------------------------------------------------------------------
Date: Fri, 10 May 85 10:28:01 pdt
From: John Bruner <seismo!mordor!jdb>
Subject: Pointer arithmetic and function pointers
To: std-c@cbosgd
> No! No! No! What about the following (which is legal and works):
>
> int (*afp[])();
>
> This is an array of pointers to functions. All arrays in C can be
> used as xxx[n] or *(xxx+n); more explicitly, an array name is actually
> the address of the first element of the array and is a constant (which
> is why an array name cannot be an lvalue). Put this all together and
> you get that arithmetic on a pointer-to-function is a necessary thing.
Given the array of pointers to functions
int (*afp[])();
the semantically equivalent expressions
afp[n] *(afp+n)
(where "n" is an integer expression) are not performing arithmetic on
pointers to functions. The arithmetic is performed on a pointer to a
pointer to function. The type of "afp" in an expression (except sizeof)
is (int (**)()) [C.2.2.1]. The integer expression is scaled by
"sizeof (int (*)())", making this equivalent to
(int (*)()) ( (unsigned long)afp + n*sizeof(int (*)()) )
--
John Bruner (S-1 Project, Lawrence Livermore National Laboratory)
MILNET: jdb@mordor.ARPA [jdb@s1-c] (415) 422-0758
UUCP: ...!ucbvax!dual!mordor!jdb ...!decvax!decwrl!mordor!jdb
------------------------------
Date: Fri, 10 May 85 14:39:38 edt
From: Alex Dupuy <seismo!columbia!dupuy>
Subject: Pointer arithmetic and function pointers
To: std-c@cbosgd
>>Since the size of a function object is not defined, I believe this
>>should be amended to disallow expressions which combine integers and
>>pointers to functions:
>>
>> foo + 1 /* illegal */
>
>No! No! No! What about the following (which is legal and works):
>
> int (*afp[])();
>
>This is an array of pointers to functions.
-----------
Exactly. Since it is an array of function -pointers-, when you do something
like
*afp[1] (arg);
or equivalently, *(*(afp+1)) (arg);
you're adding 1 to a (constant) pointer to a -pointer to a function-. Though
"sizeof int()" is undefined, "sizeof int *()" is defined, usually the same as
sizeof(*int). Since the first message doesn't say anything about pointers to
pointers to functions, your construct is perfectly legal. The twisted nature
of C type declarations and the array/pointer distinction make this a confusing
problem, but there is no reason to allow adding integers to function pointers,
except that it might cause others to make the same mistake as you. One could
make a case for multiple entry points to a function, though; allowing you to
add a -label- to a function, but this is an extension to C which doesn't really
belong in the standard.
@alex
------------------------------
Date: 10 May 85 13:19:28 CDT (Fri)
From: ihnp4!bbncca!keesan
Subject: Pointer arithmetic and function pointers
To: ihnp4!cbosgd!std-c, ihnp4!nbires!gangue!obo586!dir
Arithmetic on pointers to pointers is fine, but I agree with the
original poster that arithmetic on pointers to functions should be
explicitly prohibited.
Morris M. Keesan
{decvax,linus,ihnp4,wanginst,wjh12,ima}!bbncca!keesan
keesan @ BBN-UNIX.ARPA
------------------------------
Date: Fri, 10 May 85 13:07:06 CDT
From: William LeFebvre <ucbvax!phil@rice.ARPA>
Subject: Pointer arithmetic and function pointers
To: cbosgd!nbires!gangue!obo586!dir@BERKELEY
I agree with the original posting: arithmetic on a pointer-to-function
makes no sense.
William LeFebvre
Department of Computer Science
Rice University
<phil@Rice.arpa>
------------------------------
End of mod.std.c Digest - Sat, 11 May 85 10:50:39 EDT
******************************
USENET -> posting only through cbosgd!std-c.
ARPA -> ... through cbosgd!std-c@BERKELEY.ARPA (NOT to INFO-C)
In all cases, you may also reply to the author(s) above.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads