On Tue, 2022-03-01 at 10:35 -0800, Charles Mills wrote: > Well, I am not the C standard, but you can find it online. <g> > > I believe nullptr is numerically equal to zero, but it is a pointer > type. It > is perhaps equivalent to (void *)0
nullptr is a pointer literal of type std::nullptr_t, and it's a prvalue (you cannot take the address of it using &). 4.10 about pointer conversion says that a prvalue of type std::nullptr_t is a null pointer constant, and that an integral null pointer constant can be converted to std::nullptr_t. The opposite direction is not allowed. This allows overloading a function for both pointers and integers, and passing nullptr to select the pointer version. Passing NULL or 0 would confusingly select the int version. A cast of nullptr_t to an integral type needs a reinterpret_cast, and has the same semantics as a cast of (void*)0 to an integral type (mapping implementation defined). A reinterpret_cast cannot convert nullptr_t to any pointer type. Rely on the implicit conversion if possible or use static_cast. The Standard requires that sizeof(nullptr_t) be sizeof(void*). > > It is specifically not an integer, unlike NULL, which is another name > for > the integer zero. > > <Untested> > > int foo = NULL; // compiles > int bar = nullptr; // generates an error > void *sojack = nullptr; // compiles > > Charles > > > -----Original Message----- > From: IBM Mainframe Discussion List [mailto:[email protected]] > On > Behalf Of Seymour J Metz > Sent: Tuesday, March 1, 2022 10:09 AM > To: [email protected] > Subject: Re: ZAD and C/C++ (was:: 2.5 Heads Up) > > Is nullptr an address of 0, or is it an address guarantied to not be > valid? > > "An integer constant expression with the value 0, or such an > expression cast > to type void *, is called a null pointer constant. If a null pointer > constant is converted to a pointer type, the resulting pointer, > called a > null pointer, is guaranteed to compare unequal to a pointer to any > object or > function." > > > -- > Shmuel (Seymour J.) Metz > http://mason.gmu.edu/~smetz3 > > ________________________________________ > From: IBM Mainframe Discussion List [[email protected]] on > behalf of > Charles Mills [[email protected]] > Sent: Tuesday, March 1, 2022 11:46 AM > To: [email protected] > Subject: Re: ZAD and C/C++ (was:: 2.5 Heads Up) > > C is a standardized language. IBM's main target market is programs > ported > from other platforms. I have no idea what the standard is, but IBM > *may* > simply be following it. fopen(NULL, ...) is pretty useless any way > you slice > it. > > I have no idea what (void I)"" would mean and I don't *think* it is > valid C. > A quick test of auto foo = (void I)""; gives me a bunch of errors. > > NULL is nothing special in C: it is just an alias for 0 (zero). That > lead to > a somewhat astonishing behavior in a particular situation involving > overloaded functions, and the new (C++ only? Perhaps C also) language > standards include nullptr, which is specifically an *address* of > zero, and > is a better usage than NULL if the meaning is "the address of > nothing." That > is, "you are expecting me to pass you an address and I am telling you > that I > have no address to give you." > > Charles > > > -----Original Message----- > From: IBM Mainframe Discussion List [mailto:[email protected]] > On > Behalf Of Paul Gilmartin > Sent: Tuesday, March 1, 2022 8:30 AM > To: [email protected] > Subject: ZAD and C/C++ (was:: 2.5 Heads Up) > > On Tue, 1 Mar 2022 13:28:01 +0000, wrote: > > <snip> > > ZAD is not supported on z/OS under z/VM. " :-( > > Is there any SOD or RFE or the like for this? > > </snip> > > > Many releases ago, I saw a report the C RTL treatment of following a > NULL pointer was changing. I tested open( NULL, ... ) with releases > before and after the change. The earlier reported Invalid Pointer; > the > later Invalid Filename. I considered the earlier more precise and > correct. I conjecture that IBM had fecklessly accommodated > programmers accustomed to misusing NULL instead of e.g. (void I)"". > > There are probably still programs that follow null pointers. What > will > become of them? > > I favor strict error reporting. > > -- gil > > ------------------------------------------------------------------- > --- > For IBM-MAIN subscribe / signoff / archive access instructions, > send email to [email protected] with the message: INFO IBM- > MAIN > > ------------------------------------------------------------------- > --- > For IBM-MAIN subscribe / signoff / archive access instructions, > send email to [email protected] with the message: INFO IBM- > MAIN > > ------------------------------------------------------------------- > --- > For IBM-MAIN subscribe / signoff / archive access instructions, > send email to [email protected] with the message: INFO IBM- > MAIN > > ------------------------------------------------------------------- > --- > For IBM-MAIN subscribe / signoff / archive access instructions, > send email to [email protected] with the message: INFO IBM- > MAIN ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN
