Value, value, who's got the value?
David Goodenough
dg at lakart.UUCP
Sat Apr 29 02:13:04 AEST 1989
>From article <1044 at itivax.iti.org>, by scs at vax3.iti.org (Steve Simmons):
] Consider the following program:
]
] int func1()
] {
] int b ;
] b = 2 ;
] }
]
] int func2()
] {
] int c = 3 ;
] c ;
] }
]
] main()
] {
] int a = 1 ;
] printf( "Value of a is %d\n", a ) ;
] a = func1() ;
] printf( "Value of a is %d\n", a ) ;
] a = func2() ;
] printf( "Value of a is %d\n", a ) ;
] }
]
] Compile and run this on a UNIX-PC (system V) under standard cc or
] with gcc, and the result is:
] Value of a is 1
] Value of a is 2
] Value of a is 3
]
] On BSD43. with standard cc or gcc, the result is
] Value of a is 1
] Value of a is 0
] Value of a is 0
]
] Several questions: why does the OS make a difference;
It's not the OS, it's the compiler. Since you didn't say what func1() and
func2() return explicitly, they return whatever happens to be in registers
at the time. On a 68020, generally the return value comes back in d0, on
a 286 / 386 machine I'd guess it'd be in ax, although what you'd do with
a long I'm not sure.
] why does
] System V get it 'right' (even tho the code is wrong);
Both get it right, since the return value of a function without a
return expr ;
is undefined.
] why do
] none of these flag func2 as having a syntax error?
Because it doesn't have one.
statement ::= ...... | expr ; | .........
expr ::= ....... | variable | .........
Hence
int i;
i;
is syntactically correct.
--
dg at lakart.UUCP - David Goodenough +---+
IHS | +-+-+
....... !harvard!xait!lakart!dg +-+-+ |
AKA: dg%lakart.uucp at xait.xerox.com +---+
More information about the Comp.lang.c
mailing list