Printf question | | |
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 | | | | re: Printf question anonymous@coolgroups.com scribbled the following:[color=blue]
> 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.[/color]
[color=blue]
> #include<stdio.h>
> int main()
> {
> printf("%d");
> return 0;
> }[/color]
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 (palaste@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 | | | | re: Printf question
Joona I Palaste wrote:[color=blue]
>
> anonymous@coolgroups.com scribbled the following:[color=green]
> > 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.[/color]
>[color=green]
> > #include<stdio.h>
> > int main()
> > {
> > printf("%d");
> > return 0;
> > }[/color]
>
> 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.[/color]
It's undefined.
It need not be documented and it need not be repeatable.
--
pete | | | | re: Printf question
pete <pfiland@mindspring.com> scribbled the following:[color=blue]
> Joona I Palaste wrote:[color=green]
>> anonymous@coolgroups.com scribbled the following:[color=darkred]
>> > 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.[/color]
>>[color=darkred]
>> > #include<stdio.h>
>> > int main()
>> > {
>> > printf("%d");
>> > return 0;
>> > }[/color]
>>
>> 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.[/color][/color]
[color=blue]
> It's undefined.
> It need not be documented and it need not be repeatable.[/color]
That's why I said "you are creating undefined behaviour", and that's
also why I said "most probably" instead of "certainly".
--
/-- Joona Palaste (palaste@cc.helsinki.fi) ------------- Finland --------\
\-- http://www.helsinki.fi/~palaste --------------------- rules! --------/
"'I' is the most beautiful word in the world."
- John Nordberg | | | | re: Printf question anonymous@coolgroups.com spoke thus:
[color=blue]
> int main()
> {
> printf("%d");
> return 0;
> }[/color]
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. | | | | re: Printf question
Christopher Benson-Manica <ataru@nospam.cyberspace.org> scribbled the following:[color=blue]
> anonymous@coolgroups.com spoke thus:[color=green]
>> int main()
>> {
>> printf("%d");
>> return 0;
>> }[/color][/color]
[color=blue]
> 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.[/color]
Failing to supply a newline at the end of the program's output causes
undefined behaviour? Chapter and verse, please?
--
/-- Joona Palaste (palaste@cc.helsinki.fi) ------------- Finland --------\
\-- http://www.helsinki.fi/~palaste --------------------- rules! --------/
"You will be given the plague."
- Montgomery Burns | | | | re: Printf question
Joona I Palaste <palaste@cc.helsinki.fi> spoke thus:
[color=blue]
> Failing to supply a newline at the end of the program's output causes
> undefined behaviour? Chapter and verse, please?[/color]
Um... can I quote from the book of Revelation? ;( Apparently I
(badly!) mis-recalled previous discussion on the topic. Thanks for
the cluon...
--
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. | | | | re: Printf question
Joona I Palaste wrote:[color=blue]
>
> pete <pfiland@mindspring.com> scribbled the following:[color=green]
> > Joona I Palaste wrote:[color=darkred]
> >> anonymous@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.[/color][/color]
>[color=green]
> > It's undefined.
> > It need not be documented and it need not be repeatable.[/color]
>
> That's why I said "you are creating undefined behaviour",
> and that's also why I said "most probably" instead of "certainly".[/color]
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 | | | | re: Printf question
Joona I Palaste wrote:[color=blue]
>
> Christopher Benson-Manica <ataru@nospam.cyberspace.org> scribbled the following:[color=green]
> > anonymous@coolgroups.com spoke thus:[color=darkred]
> >> int main()
> >> {
> >> printf("%d");
> >> return 0;
> >> }[/color][/color]
>[color=green]
> > 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.[/color]
>
> Failing to supply a newline at the end of the program's output causes
> undefined behaviour? Chapter and verse, please?[/color]
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 | | | | re: Printf question
In <bugqbd$2f$1@oravannahka.helsinki.fi> Joona I Palaste <palaste@cc.helsinki.fi> writes:
[color=blue]
>anonymous@coolgroups.com scribbled the following:[color=green]
>> 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.[/color]
>[color=green]
>> #include<stdio.h>
>> int main()
>> {
>> printf("%d");
>> return 0;
>> }[/color]
>
>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. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^[/color]
^^^^^^^^^^^^^^^^^^^^^^
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.Pop@ifh.de | | | | re: Printf question
In <bugrkj$10j$1@oravannahka.helsinki.fi> Joona I Palaste <palaste@cc.helsinki.fi> writes:
[color=blue]
>Christopher Benson-Manica <ataru@nospam.cyberspace.org> scribbled the following:[color=green]
>> anonymous@coolgroups.com spoke thus:[color=darkred]
>>> int main()
>>> {
>>> printf("%d");
>>> return 0;
>>> }[/color][/color]
>[color=green]
>> 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.[/color]
>
>Failing to supply a newline at the end of the program's output causes
>undefined behaviour? Chapter and verse, please?[/color]
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
--
Dan Pop
DESY Zeuthen, RZ group
Email: Dan.Pop@ifh.de | | | | re: Printf question
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!
[color=blue]
>anonymous@coolgroups.com spoke thus:
>[color=green]
>> int main()
>> {
>> printf("%d");
>> return 0;
>> }[/color]
>
>Your program produces undefined behavior in two ways - one, by failing[/color]
^^^
Would you believe three ways?
[color=blue]
>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[/color]
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"? |  | | | | /bytes/about
We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights.
Get the best answers to your questions from over 226,223 network members.
|