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