#include<stdio.h>
int main()
{
printf("%d");
return 0;
}
Thanks in advance.
Sha
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
It's undefined.
It need not be documented and it need not be repeatable.
--
pete
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
> 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.
> 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
> 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...
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
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
>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
>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.
>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"?