Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > C Moderated > Re: Non-null po...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 11 of 49 Topic 1099 of 1142
Post > Topic >>

Re: Non-null pointers in C/C++?

by angel_tsankov <fn42551@[EMAIL PROTECTED] > Jun 1, 2008 at 12:35 PM

On 29 =ED=C1=CA, 18:58, James Kuyper <jameskuy...@[EMAIL PROTECTED]
> wrote:
> angel_tsankov wrote:
> > On 23 =ED=C1=CA, 23:57, jameskuy...@[EMAIL PROTECTED]
 wrote:
> ...
> >> What you need to do is be more specific about what precisely is
> >> prohibited. I gather that you want it to be prohibited at compile
> >> time, so that code with behavior that is otherwise well-defined and
> >> which compiles without diagnostics is guaranteed to never generate a
> >>nullvalue for an unnullablepointer. In standardese, that means that
> >> any problematic code must be either a syntax error or a constraint
> >> violation, and it doesn't seem feasible to me to make these syntax
> >> errors.
>
> > Why? Could you sup****t your point with some more details or examples?
>
> Simplest example:
>
> void func(char *p)
> {
>      unnullable char *q=3Dp;
>      // Code which uses q, relying upon it not beingnull.
>
> }
>
> Code like this would have to be prohibited, since 'p' might benull.

Yes, implicit conversion from a nullable pointer to a unnullable would
be prohibited. However, there might be a reason for explicit
conversion:

void func(char *p)
{
	if (p !=3D NULL)
	{
		unnullable char* r =3D (unnullable char*)q;
		// ...
	}
}

> However, it's very difficult to write a rule that prohibits such code by
> making it a syntax error. If you think otherwise, please provide grammar
> rules that express that idea. On the other hand, it's easy to express
> such a prohibition as a violation of a constraint, one that requires
> that the initializer for an unnullablepointerbe an expression with a
> nullablepointertype.
>
> >> It would also have to be constraint violation for an
> >> object with an unnullablepointertype to be left uninitialized. As a
> >> result, I don't think it would be feasible to allow the space
> >> containing an unnullablepointerobject to be allocated using the
> >> malloc() family.
>
> > One could have malloc2(), taking an unnullablepointerthat would
> > serve as initilizer for the malloc'ed unnullablepointer.
>
> The C standard currently allows for the possibility that pointers to
> different types can have different representations, and even different
> sizes. There are a number of good reasons why many real-world
> implementations actually use two or more differentpointer
> representations, depending upon the type of the object being pointed at.
> How could such an implementation implement malloc2() so it would know
> which representation to use? It would be relatively straightforward to
> handle that case by making malloc2() a C++ template function, but I
> don't see any easy way to do it in C.

I do not really get your point here... As far as I know malloc does
not care about types - it only cares about allocating memory of the
specified amount.

> Would it be prohibited for a structure to contain a member of
unnullablepo=
intertype? If not, how do you tell malloc2() where to insert
thepointerthat =
it takes as an argument, when allocating space for such a
> structure?
> Could you allocate an array of unnullable pointers? Does that mean that
> malloc2() would have to be prepared to accept an unlimited number
ofpointe=
rarguments as initializers, presumably by using a <varargs.h>
> interface? Or would it initialize all of them to point at the same
> object, and let them be reassigned later? Unlike the previous issues,
> this one has at least two different perfectly feasible solutions; but
> you'll have to choose one.

Automatic arrays would either be randomly initialized or prohibited.

> >> The address-of operator (&) would have to have a value which is
> >> neither nullable nor unnullable, but usable for either purpose; the
> >> initializer for an object with an unnullablepointertype would have
> >> to be the address of an lvalue expression. You'd need a special case
> >> to disallow
>
> >> unnullable char* p =3D &*(char*)0;
>
> > This code is undefined behaviour - *(char*)0.
>
> No, it does not. The expression "*(char*)0", if it were to occur in most
> other contexts, would have undefined behavior. However, section
> 6.5.3.2p3, describing the '&' operator, says "If the operand is the
> result of a unary * operator, neither that operator nor the & operator
> is evaluated and the result is as if both were omitted,". In other
> words, &*(char*)0 is equivalent to (char*)0, which has perfectly
> well-defined behavior, even though *(char*)0 would have undefined
> behavior in any other context.

Ooops, sorry. I think initialization with constant expressions should
be prohibited, too. In fact, it would only be possible to initialize
an unnullable pointer fron an object, just like references in C++.
This is a bare minimum; it could be extended, if needed.

> --
> comp.lang.c.moderated - moderation address: c...@[EMAIL PROTECTED]
 -- you
must
> have an appropriate newsgroups line in your header for your mail to be
see=
n,
> or the newsgroup name in square brackets in the subject line.  Sorry.
-- 
comp.lang.c.moderated - moderation address: clcm@[EMAIL PROTECTED]
 -- you must
have an appropriate newsgroups line in your header for your mail to be
seen,
or the newsgroup name in square brackets in the subject line.  Sorry.
 




 49 Posts in Topic:
Non-null pointers in C/C++?
angel_tsankov <fn42551  2008-05-13 01:06:32 
Re: Non-null pointers in C/C++?
Francis Glassborow <fr  2008-05-15 11:00:31 
Re: Non-null pointers in C/C++?
"Wojtek Lerch"   2008-05-22 16:51:34 
Re: Non-null pointers in C/C++?
gordonb.ll93b@[EMAIL PROT  2008-05-23 15:57:23 
Re: Non-null pointers in C/C++?
"Wojtek Lerch"   2008-05-24 18:15:37 
Re: Non-null pointers in C/C++?
angel_tsankov <fn42551  2008-05-22 16:51:43 
Re: Non-null pointers in C/C++?
jameskuyper@[EMAIL PROTEC  2008-05-23 15:57:09 
Re: Non-null pointers in C/C++?
angel_tsankov <fn42551  2008-05-28 13:35:14 
Re: Non-null pointers in C/C++?
James Kuyper <jameskuy  2008-05-29 10:58:00 
Re: Non-null pointers in C/C++?
James Kuyper <jameskuy  2008-06-01 12:35:06 
Re: Non-null pointers in C/C++?
angel_tsankov <fn42551  2008-06-01 12:35:16 
Re: Non-null pointers in C/C++?
James Kuyper <jameskuy  2008-06-02 11:54:23 
Re: Non-null pointers in C/C++?
angel_tsankov <fn42551  2008-06-10 00:56:47 
Re: Non-null pointers in C/C++?
James Kuyper <jameskuy  2008-06-12 19:25:13 
Re: Non-null pointers in C/C++?
angel_tsankov <fn42551  2008-06-14 03:02:07 
Re: Non-null pointers in C/C++?
angel_tsankov <fn42551  2008-06-18 08:45:23 
Re: Non-null pointers in C/C++?
angel_tsankov <fn42551  2008-06-18 08:45:31 
Re: Non-null pointers in C/C++?
angel_tsankov <fn42551  2008-06-28 19:04:48 
Re: Non-null pointers in C/C++?
gordon@[EMAIL PROTECTED]   2008-07-04 01:45:57 
Re: Non-null pointers in C/C++?
"Angel Tsankov"  2008-07-08 21:18:29 
Re: Non-null pointers in C/C++?
gordonb.4ax5t@[EMAIL PROT  2008-07-10 13:02:14 
Re: Non-null pointers in C/C++?
"Angel Tsankov"  2008-07-12 18:10:36 
Re: Non-null pointers in C/C++?
gordonb.4dbn6@[EMAIL PROT  2008-07-13 10:55:33 
Re: Non-null pointers in C/C++?
"Angel Tsankov"  2008-07-20 15:07:13 
Re: Non-null pointers in C/C++?
James Kuyper <jameskuy  2008-07-21 18:28:00 
Re: Non-null pointers in C/C++?
"Angel Tsankov"  2008-07-23 22:51:02 
Re: Non-null pointers in C/C++?
James Kuyper <jameskuy  2008-07-25 12:15:29 
Re: Non-null pointers in C/C++?
"Angel Tsankov"  2008-08-02 12:34:34 
Re: Non-null pointers in C/C++?
James Kuyper <jameskuy  2008-08-07 15:01:26 
Re: Non-null pointers in C/C++?
"Angel Tsankov"  2008-08-11 19:05:20 
Re: Non-null pointers in C/C++?
blargg.h4g@[EMAIL PROTECT  2008-08-14 15:29:10 
Re: Non-null pointers in C/C++?
jameskuyper@[EMAIL PROTEC  2008-08-14 15:29:37 
Re: Non-null pointers in C/C++?
"Angel Tsankov"  2008-08-20 21:30:20 
Re: Non-null pointers in C/C++?
John Nagle <nagle@[EMA  2008-08-14 15:30:30 
Re: Non-null pointers in C/C++?
"Mabden" <Ma  2008-08-09 12:08:24 
Re: Non-null pointers in C/C++?
Jasen Betts <jasen@[EM  2008-07-20 15:07:47 
Re: Non-null pointers in C/C++?
"Angel Tsankov"  2008-07-21 18:28:13 
Re: Non-null pointers in C/C++?
Francis Glassborow <fr  2008-07-04 01:46:17 
Re: Non-null pointers in C/C++?
James Kuyper <jameskuy  2008-06-12 19:32:35 
Re: Non-null pointers in C/C++?
Philip Lantz <prl@[EMA  2008-06-14 03:01:41 
Re: Non-null pointers in C/C++?
=?ISO-8859-1?Q?Hans-Bernh  2008-05-15 11:00:41 
Re: Non-null pointers in C/C++?
"Wojtek Lerch"   2008-05-22 16:51:39 
Re: Non-null pointers in C/C++?
angel_tsankov <fn42551  2008-05-22 16:51:46 
Re: Non-null pointers in C/C++?
Jonathan Leffler <jlef  2008-05-24 18:15:49 
Re: Non-null pointers in C/C++?
gordonb.vehsx@[EMAIL PROT  2008-05-15 11:00:54 
Re: Non-null pointers in C/C++?
Eric Sosman <Eric.Sosm  2008-05-22 16:51:21 
Re: Non-null pointers in C/C++?
angel_tsankov <fn42551  2008-05-22 16:51:53 
Re: Non-null pointers in C/C++?
Matthias Buelow <mkb@[  2008-05-23 15:57:49 
Re: Non-null pointers in C/C++?
Roberto Waltman <usene  2008-06-10 00:57:00 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Wed Aug 27 17:51:02 CDT 2008.