Printf question

A

anonymous

Hi CLCers,
The program below prints some number and i dont
understand why it is behaving like this. I am not supplying
the necessary arguments to the printf function and
according to my understanding the program shiould throw
some error. Please clear my doubts.

#include<stdio.h>
int main()
{
printf("%d");
return 0;
}

Thanks in advance.

Sha
 
J

Joona I Palaste

(e-mail address removed) scribbled the following:
Hi CLCers,
The program below prints some number and i dont
understand why it is behaving like this. I am not supplying
the necessary arguments to the printf function and
according to my understanding the program shiould throw
some error. Please clear my doubts.
#include<stdio.h>
int main()
{
printf("%d");
return 0;
}

You are creating undefined behaviour. printf() expects an argument,
because of the format string, but you didn't supply one. This, by
itself, creates undefined behaviour, so anything might happen,
including printing random numbers. Most probably it's reading a
value from the top of the stack, but whatever value that is is
implementation-defined.
 
P

pete

Joona said:
(e-mail address removed) scribbled the following:


You are creating undefined behaviour. printf() expects an argument,
because of the format string, but you didn't supply one. This, by
itself, creates undefined behaviour, so anything might happen,
including printing random numbers. Most probably it's reading a
value from the top of the stack, but whatever value that is is
implementation-defined.

It's undefined.
It need not be documented and it need not be repeatable.
 
J

Joona I Palaste

It's undefined.
It need not be documented and it need not be repeatable.

That's why I said "you are creating undefined behaviour", and that's
also why I said "most probably" instead of "certainly".
 
C

Christopher Benson-Manica

(e-mail address removed) spoke thus:
int main()
{
printf("%d");
return 0;
}

Your program produces undefined behavior in two ways - one, by failing
to specify an argument for the %d conversion specifier (as others
noted), and two, by failing to supply a newline at the end of your
program's output. Invoking undefined behavior means that the
implementation is free to do whatever it wants, up to and including
perpetrating terrorist acts.
 
J

Joona I Palaste

Christopher Benson-Manica said:
(e-mail address removed) spoke thus:
Your program produces undefined behavior in two ways - one, by failing
to specify an argument for the %d conversion specifier (as others
noted), and two, by failing to supply a newline at the end of your
program's output. Invoking undefined behavior means that the
implementation is free to do whatever it wants, up to and including
perpetrating terrorist acts.

Failing to supply a newline at the end of the program's output causes
undefined behaviour? Chapter and verse, please?
 
C

Christopher Benson-Manica

Joona I Palaste said:
Failing to supply a newline at the end of the program's output causes
undefined behaviour? Chapter and verse, please?

Um... can I quote from the book of Revelation? ;( Apparently I
(badly!) mis-recalled previous discussion on the topic. Thanks for
the cluon...
 
P

pete

Joona said:
That's why I said "you are creating undefined behaviour",
and that's also why I said "most probably" instead of "certainly".

There is nothing about the value at the top of the stack
(assuming a stack)
which suggests that it is an implementation defined value.
 
P

pete

Joona said:
Failing to supply a newline at the end of the program's output causes
undefined behaviour? Chapter and verse, please?

It's from the definition of "stream".

Whether or not the last line of a text stream needs to be
newline terminated is implementation defined.

If it isn't newline terminated, then it isn't a portable stream.
If it isn't a stream, then what is it ?
 
D

Dan Pop

In said:
(e-mail address removed) scribbled the following:


You are creating undefined behaviour. printf() expects an argument,
because of the format string, but you didn't supply one. This, by
itself, creates undefined behaviour, so anything might happen,
including printing random numbers. Most probably it's reading a
value from the top of the stack, but whatever value that is is
implementation-defined. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^
Nope, it ain't. It's *unspecified*, but this doesn't matter, because
undefined behaviour has *already* been invoked.

Be *very* careful when using terms like "implementation-defined", because
their meaning is precisely defined by the C standard (and the definition
is not always what one would intuitively expect).

Dan
 
D

Dan Pop

In said:
Failing to supply a newline at the end of the program's output causes
undefined behaviour? Chapter and verse, please?

2 A text stream is an ordered sequence of characters composed into
lines, each line consisting of zero or more characters
plus a terminating new-line character. Whether the last line
requires a terminating new-line character is implementation-defined.

So, if the implementation requires it, but the program doesn't supply it
you have undefined behaviour by lack of specification of behaviour.

Dan
 
P

Peter Shaggy Haywood

Groovy hepcat Christopher Benson-Manica was jivin' on Mon, 19 Jan 2004
14:54:48 +0000 (UTC) in comp.lang.c.
Re: Printf question's a cool scene! Dig it!
(e-mail address removed) spoke thus:


Your program produces undefined behavior in two ways - one, by failing
^^^
Would you believe three ways?
to specify an argument for the %d conversion specifier (as others
noted), and two, by failing to supply a newline at the end of your

Three, failing to provide a prototype for printf().

--

Dig the even newer still, yet more improved, sig!

http://alphalink.com.au/~phaywood/
"Ain't I'm a dog?" - Ronny Self, Ain't I'm a Dog, written by G. Sherry & W. Walker.
I know it's not "technically correct" English; but since when was rock & roll "technically correct"?
 

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

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,048
Latest member
verona

Latest Threads

Top