printf( )

S

sarma

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?
 
C

Chris Dollin

sarma said:
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?
 
D

Default User

sarma said:
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
 
S

sarma

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
 
R

Richard Bos

sarma said:
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
 
J

jjf

sarma said:
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.
 
A

Al Balmer

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.
 
J

John Bode

sarma said:
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.
 
K

Keith Thompson

John Bode said:
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top