86 lines
1.4 KiB
C
86 lines
1.4 KiB
C
|
/*
|
||
|
* (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
||
|
*
|
||
|
* This product is part of the Amsterdam Compiler Kit.
|
||
|
*
|
||
|
* Permission to use, sell, duplicate or disclose this software must be
|
||
|
* obtained in writing. Requests for such permissions may be sent to
|
||
|
*
|
||
|
* Dr. Andrew S. Tanenbaum
|
||
|
* Wiskundig Seminarium
|
||
|
* Vrije Universiteit
|
||
|
* Postbox 7161
|
||
|
* 1007 MC Amsterdam
|
||
|
* The Netherlands
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
/* Author: E.G. Keizer */
|
||
|
|
||
|
/* Test a few declaration features */
|
||
|
/* Such as:
|
||
|
forward function declarations,
|
||
|
redeclarations,
|
||
|
pointer to function declarations.
|
||
|
*/
|
||
|
|
||
|
static int sqr() ; /* forward declarations */
|
||
|
extern int sqrt();
|
||
|
|
||
|
main() {
|
||
|
fdcl() ;
|
||
|
hidden() ;
|
||
|
return 0 ;
|
||
|
}
|
||
|
|
||
|
fdcl() {
|
||
|
int (*a[2])() ;
|
||
|
|
||
|
printf("sqr(4) %d\n",sqr(4)) ;
|
||
|
|
||
|
a[0]=sqr ; a[1]=sqrt ;
|
||
|
printf("(*a[0])(16) %d\n",(*a[0])(16) ) ;
|
||
|
printf("(*a[1])( (*a[0])(3) ) %d\n", (*a[1])( (*a[0])(3) ) ) ;
|
||
|
}
|
||
|
|
||
|
static int sqr(par) int par ; {
|
||
|
return par*par ;
|
||
|
}
|
||
|
|
||
|
int sqrt(par) int par ; {
|
||
|
float x1,x2 ;
|
||
|
int i ;
|
||
|
|
||
|
if ( par<0 ) return -1 ;
|
||
|
x1 = par ;
|
||
|
i=0 ;
|
||
|
do {
|
||
|
x2 = x1 ;
|
||
|
x1 = ( x2*x2 + par ) / (2*x2) ;
|
||
|
if ( i++>=100 ) return -2 ;
|
||
|
} while ( ( x2<x1 ? x1-x2 : x2-x1 ) > 1e-5 ) ;
|
||
|
return (x1+x2)/2 ;
|
||
|
}
|
||
|
|
||
|
int a = -8 ;
|
||
|
|
||
|
hidden() {
|
||
|
hide() ;
|
||
|
printf("a outside hide %d\n",a) ;
|
||
|
}
|
||
|
|
||
|
int hide() {
|
||
|
int a ;
|
||
|
|
||
|
a = 4 ;
|
||
|
printf("a in hide %d\n",a) ;
|
||
|
{
|
||
|
int a ;
|
||
|
|
||
|
a = 16 ;
|
||
|
printf("a in in hide %d\n",a) ;
|
||
|
|
||
|
}
|
||
|
printf("a in hide %d\n",a) ;
|
||
|
}
|