Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Kaz Kylheku <kaz@kylheku.com> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: pass by address |
| Date | 2014-05-04 23:50 +0000 |
| Organization | Aioe.org NNTP Server |
| Message-ID | <20140504163804.953@kylheku.com> (permalink) |
| References | (7 earlier) <lk4efb$vj2$1@dont-email.me> <1phbm9t64tdkhq9pq5ng42v15s44tr01e0@4ax.com> <slrnlmbvg5.m4n.tth@hangartistique.cispeo.fr> <lnr44aj596.fsf@nuthaus.mib.org> <20140504135316.177@kylheku.com> |
On 2014-05-04, Kaz Kylheku <kaz@kylheku.com> wrote:
> On 2014-05-04, Keith Thompson <kst-u@mib.org> wrote:
>> Tonton Th <tth@nowhere.invalid> writes:
>>> On 2014-05-04, Barry Schwarz <schwarzb@dqel.com> wrote:
>>>>>#include <stdio.h>
>>>>>
>>>>>int main()
>>>>>{
>>>>> int a = 15;
>>>>> int *p;
>>>>> p = &a;
>>>>> printf("%p\n", &p);
>>>>
>>>> Undefined behavior #1.
>>>>
>>>>> printf("%p\n", p);
>>>>
>>>> Undefined behavior #2.
>>>>
>>>>> printf("%d\n", *p);
>>>>>}
>>>
>>> I don't understand where in the undefined behaviour. Not so usable
>>> values printed, yes, but &p and p are pointers, so %p can print their
>>> values, no ?
>>>
>>> Maybe because p and &p are not 'void *' pointers...
>>
>> That's exactly it. "%p" requires an argument of type void*, not of any
>> arbitrary pointer type. In practice, most implementations use the same
>> representation and argument passing convention for all pointer types, so
>> it's likely to work, but for well-defined behavior you need to cast the
>> arguments to void*.
>
> For well-defined behavior, you must also avoid the inclusion of
> any header which us not in ISO C nor in your program, such as
>
> #include <unistd.h>
>
> Standard-defined behavior is an unrealistic goal for many kinds
> of programs. The concept broadly encompasses issues of correctness,
> as well as portability.
>
> The assumption that %p can print any pointer is not maximally
> portable, that is all.
I'd like to add that you're not really doing a better job of programming
by doing things like printf("%p", (void *) ptr).
You're only wasting time on portability to a machine that you don't have.
If you don't have that machine, you have no way to verify to what
extent you have done a proper job (at least no empirical way).
In other words, portability to hardware that you don't have is half-assed
portability. Not a real portability that actually targets the machine,
and delivers a release for actual deployment somewhere.
Portability to hardware that you don't ever *plan* to have is not
economically justifiable: there is no business case for it.
So, the effort is doubly damned: you're doing a half-assed job of something for
which there is no business case in the first place.
(Kind of like working on a new ISO C standard, isn't it.)
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
pass by address "Bill Cunningham" <nosapm@nspam.invalid> - 2014-05-02 16:53 -0400
Re: pass by address "Bill Cunningham" <nosapm@nspam.invalid> - 2014-05-02 17:03 -0400
Re: pass by address "Bill Cunningham" <nosapm@nspam.invalid> - 2014-05-02 17:20 -0400
Re: pass by address Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2014-05-02 17:58 -0400
Re: pass by address "Bill Cunningham" <nosapm@nspam.invalid> - 2014-05-02 18:09 -0400
Re: pass by address Barry Schwarz <schwarzb@dqel.com> - 2014-05-02 16:37 -0700
Re: pass by address gazelle@shell.xmission.com (Kenny McCormack) - 2014-05-02 23:43 +0000
Re: pass by address Richard <rgrdev_@gmail.com> - 2014-05-03 15:58 +0200
Re: pass by address gazelle@shell.xmission.com (Kenny McCormack) - 2014-05-03 14:08 +0000
Re: pass by address Barry Schwarz <schwarzb@dqel.com> - 2014-05-03 10:38 -0700
Re: pass by address Richard <rgrdev_@gmail.com> - 2014-05-03 21:13 +0200
Re: pass by address "Bill Cunningham" <nosapm@nspam.invalid> - 2014-05-03 01:46 -0400
Re: pass by address "Bill Cunningaham" <nospam@nspam.invalid> - 2014-05-03 11:22 -0400
Re: pass by address James Kuyper <jameskuyper@verizon.net> - 2014-05-03 12:13 -0400
Re: pass by address Keith Thompson <kst-u@mib.org> - 2014-05-03 12:34 -0700
Re: pass by address Richard <rgrdev_@gmail.com> - 2014-05-03 22:33 +0200
Re: pass by address glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2014-05-03 21:21 +0000
Re: pass by address "Bill Cunningham" <nospam@nspam.invalid> - 2014-05-04 00:08 -0400
Re: pass by address Barry Schwarz <schwarzb@dqel.com> - 2014-05-03 21:52 -0700
Re: pass by address Tonton Th <tth@nowhere.invalid> - 2014-05-04 08:44 +0000
Re: pass by address Keith Thompson <kst-u@mib.org> - 2014-05-04 01:51 -0700
Re: pass by address "Bill Cunningham" <nospam@nspam.invalid> - 2014-05-04 15:06 -0400
Re: pass by address Barry Schwarz <schwarzb@dqel.com> - 2014-05-04 15:35 -0700
Re: pass by address Richard <rgrdev_@gmail.com> - 2014-05-05 12:01 +0200
Re: pass by address Barry Schwarz <schwarzb@dqel.com> - 2014-05-05 11:46 -0700
Re: pass by address "Bill Cunningham" <nospam@nspam.invalid> - 2014-05-05 14:18 -0400
Re: pass by address Barry Schwarz <schwarzb@dqel.com> - 2014-05-05 11:55 -0700
Re: pass by address "Bill Cunningham" <nospam@nspam.invalid> - 2014-05-05 15:20 -0400
Re: pass by address "Bill Cunningham" <nospam@nspam.invalid> - 2014-05-05 15:23 -0400
Re: pass by address Ken Brody <kenbrody@spamcop.net> - 2014-05-06 11:02 -0400
Re: pass by address "Bill Cunningham" <nospam@nspam.invalid> - 2014-05-06 14:46 -0400
Re: pass by address Richard <rgrdev_@gmail.com> - 2014-05-05 12:00 +0200
Re: pass by address Malcolm McLean <malcolm.mclean5@btinternet.com> - 2014-05-05 14:50 -0700
Re: pass by address "Bill Cunningham" <nospam@nspam.invalid> - 2014-05-05 23:13 -0400
Re: pass by address "Osmium" <r124c4u102@comcast.net> - 2014-05-05 23:09 -0500
Re: pass by address "Bill Cunningham" <nospam@nspam.invalid> - 2014-05-06 08:55 -0400
Re: pass by address Ken Brody <kenbrody@spamcop.net> - 2014-05-06 11:16 -0400
Re: pass by address Richard <rgrdev_@gmail.com> - 2014-05-06 18:13 +0200
Re: pass by address Kaz Kylheku <kaz@kylheku.com> - 2014-05-04 21:06 +0000
Re: pass by address Kaz Kylheku <kaz@kylheku.com> - 2014-05-04 23:50 +0000
Re: pass by address Keith Thompson <kst-u@mib.org> - 2014-05-04 12:36 -0700
Re: pass by address "Bill Cunningham" <nospam@nspam.invalid> - 2014-05-05 14:21 -0400
Re: pass by address Keith Thompson <kst-u@mib.org> - 2014-05-04 01:29 -0700
Re: pass by address "Bill Cunningham" <nospam@nspam.invalid> - 2014-05-04 15:09 -0400
Re: pass by address "Bill Cunningaham" <nospam@nspam.invalid> - 2014-05-03 11:32 -0400
Re: pass by address Barry Schwarz <schwarzb@dqel.com> - 2014-05-02 16:43 -0700
Re: pass by address "Bill Cunningham" <nosapm@nspam.invalid> - 2014-05-03 01:54 -0400
Re: pass by address Richard <rgrdev_@gmail.com> - 2014-05-03 15:59 +0200
Re: pass by address "Bill Cunningham" <nosapm@nspam.invalid> - 2014-05-03 02:08 -0400
Re: pass by address "Bill Cunningaham" <nospam@nspam.invalid> - 2014-05-03 11:46 -0400
Re: pass by address Kaz Kylheku <kaz@kylheku.com> - 2014-05-03 21:43 +0000
csiph-web