Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Printf question

0 views
Skip to first unread message

anon...@coolgroups.com

unread,
Jan 19, 2004, 9:40:43 AM1/19/04
to
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

Joona I Palaste

unread,
Jan 19, 2004, 9:41:49 AM1/19/04
to
anon...@coolgroups.com 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.

--
/-- Joona Palaste (pal...@cc.helsinki.fi) ------------- Finland --------\
\-- http://www.helsinki.fi/~palaste --------------------- rules! --------/
"Roses are red, violets are blue, I'm a schitzophrenic and so am I."
- Bob Wiley

pete

unread,
Jan 19, 2004, 9:49:51 AM1/19/04
to
Joona I Palaste wrote:
>
> anon...@coolgroups.com 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.

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

--
pete

Joona I Palaste

unread,
Jan 19, 2004, 9:51:12 AM1/19/04
to
pete <pfi...@mindspring.com> scribbled the following:

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

--
/-- Joona Palaste (pal...@cc.helsinki.fi) ------------- Finland --------\
\-- http://www.helsinki.fi/~palaste --------------------- rules! --------/

"'I' is the most beautiful word in the world."
- John Nordberg

Christopher Benson-Manica

unread,
Jan 19, 2004, 9:54:48 AM1/19/04
to
anon...@coolgroups.com 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.

--
Christopher Benson-Manica | I *should* know what I'm talking about - if I
ataru(at)cyberspace.org | don't, I need to know. Flames welcome.

Joona I Palaste

unread,
Jan 19, 2004, 10:03:47 AM1/19/04
to
Christopher Benson-Manica <at...@nospam.cyberspace.org> scribbled the following:

> anon...@coolgroups.com 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.

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

--
/-- Joona Palaste (pal...@cc.helsinki.fi) ------------- Finland --------\
\-- http://www.helsinki.fi/~palaste --------------------- rules! --------/

"You will be given the plague."
- Montgomery Burns

Christopher Benson-Manica

unread,
Jan 19, 2004, 10:11:22 AM1/19/04
to
Joona I Palaste <pal...@cc.helsinki.fi> spoke thus:

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

pete

unread,
Jan 19, 2004, 10:23:16 AM1/19/04
to
Joona I Palaste wrote:
>
> pete <pfi...@mindspring.com> scribbled the following:
> > Joona I Palaste wrote:
> >> anon...@coolgroups.com 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.
>
> > 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".

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

--
pete

pete

unread,
Jan 19, 2004, 10:29:59 AM1/19/04
to
Joona I Palaste wrote:
>
> Christopher Benson-Manica <at...@nospam.cyberspace.org> scribbled the following:
> > anon...@coolgroups.com 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.
>
> 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 ?

--
pete

Dan Pop

unread,
Jan 19, 2004, 1:29:58 PM1/19/04
to
In <bugqbd$2f$1...@oravannahka.helsinki.fi> Joona I Palaste <pal...@cc.helsinki.fi> writes:

>anon...@coolgroups.com 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. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^
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
--
Dan Pop
DESY Zeuthen, RZ group
Email: Dan...@ifh.de

Dan Pop

unread,
Jan 19, 2004, 1:35:44 PM1/19/04
to
In <bugrkj$10j$1...@oravannahka.helsinki.fi> Joona I Palaste <pal...@cc.helsinki.fi> writes:

>Christopher Benson-Manica <at...@nospam.cyberspace.org> scribbled the following:
>> anon...@coolgroups.com 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.
>
>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.

Peter Shaggy Haywood

unread,
Jan 23, 2004, 3:12:12 AM1/23/04
to
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!

>anon...@coolgroups.com spoke thus:
>
>> int main()
>> {
>> printf("%d");
>> return 0;
>> }
>
>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"?

0 new messages