Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > printf( )

Reply
Thread Tools

printf( )

 
 
sarma
Guest
Posts: n/a
 
      07-12-2006
int a=10;
printf("%d")


the output is 10



int a=10,b=20;
printf("%d ")


the output is 20


how did it return the last defined variable?
why does printf( ) works from right to left?

 
Reply With Quote
 
 
 
 
Chris Dollin
Guest
Posts: n/a
 
      07-12-2006
sarma wrote:

> int a=10;
> printf("%d")


Undefined behaviour (expected argument value missing).
[Some compilers - eg gcc - can spot this.]

> the output is 10


Sheer accident of implementation. (The assigned value
has probably leaked into the argument register/location
which printf looks at for the first %-inserted value.)

> int a=10,b=20;
> printf("%d ")
>
> the output is 20


Sheer accident with same possible explanation.

> how did it return the last defined variable?


Coincidence.

> why does printf( ) works from right to left?


Why is the moon made of green fleas?

--
Chris "the mice ate the cheese" Dollin
"Life is full of mysteries. Consider this one of them." Sinclair, /Babylon 5/

 
Reply With Quote
 
 
 
 
Default User
Guest
Posts: n/a
 
      07-12-2006
sarma wrote:

> int a=10;
> printf("%d")
>
>
> the output is 10



This is undefined behavior. Trying to define the behavior of undefined
behavior is pointless. There's nothing for you to figure out.

Learn the language properly, from the beginning. Random questions about
deliberately broken code will tell you little. It wastes your time and
ours.





Brian
 
Reply With Quote
 
sarma
Guest
Posts: n/a
 
      07-13-2006

int a,b,c;
printf ("%u %u %u \n",&a,&b,&c);


can you predict the result. Assume thet the first variable would be
stored at an address 65540

please don't overlook this as a coincidence or an accident

May be you could find an answer my previous question

 
Reply With Quote
 
Richard Bos
Guest
Posts: n/a
 
      07-13-2006
"sarma" <> wrote:

> int a,b,c;
> printf ("%u %u %u \n",&a,&b,&c);
>
>
> can you predict the result.


No. Nobody can.

> Assume thet the first variable would be stored at an address 65540


That is an amazing assumption.

> please don't overlook this as a coincidence or an accident


That sentence does does not seem to have a meaningful connection to the
rest of your post.

Richard
 
Reply With Quote
 
jjf@bcs.org.uk
Guest
Posts: n/a
 
      07-13-2006

sarma wrote:
> int a,b,c;
> printf ("%u %u %u \n",&a,&b,&c);
>
>
> can you predict the result.


No-one can. The behaviour's undefined since you're passing pointers to
int and telling printf() it's getting unsigned integers. Even if you
fix that, it can't be predicted in general. Someone who knows intimate
details of the compiler you are using, in the mode you are using it, on
the OS it is running under, on the processor it is running on may be
able to; but that's not topical here.

> please don't overlook this as a coincidence or an accident


What do you mean?

> May be you could find an answer my previous question


What do you mean? You got two full, complete, and correct answers to
your previous question.

 
Reply With Quote
 
Al Balmer
Guest
Posts: n/a
 
      07-13-2006
On 12 Jul 2006 23:42:33 -0700, "sarma" <> wrote:

>
>int a,b,c;
>printf ("%u %u %u \n",&a,&b,&c);
>
>
>can you predict the result. Assume thet the first variable would be
>stored at an address 65540
>
>please don't overlook this as a coincidence or an accident


What, exactly, are you doing? It looks like you're writing random code
just to see what happens. If that's the case, please stop wasting our
time.
>
>May be you could find an answer my previous question


Your previous question was already answered.

--
Al Balmer
Sun City, AZ
 
Reply With Quote
 
John Bode
Guest
Posts: n/a
 
      07-13-2006

sarma wrote:
> int a,b,c;
> printf ("%u %u %u \n",&a,&b,&c);
>
>
> can you predict the result.


The behavior is undefined, therefore the result is unpredictable.

Had you written

printf("%p %p %p\n", (void*) &a, (void*) &b, (void*) &c);

then the behavior would no longer be undefined, but you would need to
specify exactly which compiler and architecture were being targeted,
since the result will vary between platforms.

> Assume thet the first variable would be
> stored at an address 65540
>
> please don't overlook this as a coincidence or an accident
>
> May be you could find an answer my previous question


Your previous question was answered. The answer was that you invoked
undefined behavior. Unless you're interested in mapping out exactly
what actions a specific compiler takes as a result of undefined
behavior (a fool's errand IMO since that can vary based on any number
of conditions, but whatever), that's as much of an answer as you need.

 
Reply With Quote
 
Keith Thompson
Guest
Posts: n/a
 
      07-13-2006
"John Bode" <> writes:
> sarma wrote:
>> int a,b,c;
>> printf ("%u %u %u \n",&a,&b,&c);
>>
>>
>> can you predict the result.

>
> The behavior is undefined, therefore the result is unpredictable.
>
> Had you written
>
> printf("%p %p %p\n", (void*) &a, (void*) &b, (void*) &c);
>
> then the behavior would no longer be undefined, but you would need to
> specify exactly which compiler and architecture were being targeted,
> since the result will vary between platforms.


Knowing the compiler would only tell you how the pointer value is
converted to a sequence of characters; it won't tell you what the
specific values are. For example, the objects a, b, and c could be
allocated in any order, and may or may not be adjacent; the
implementation is under no obligation to document this.

--
Keith Thompson (The_Other_Keith) kst- <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off




Advertisments