Subj : Re: Old C-program To : borland.public.cpp.borlandcpp From : Vladimir Grigoriev Date : Tue Oct 11 2005 05:08 pm Also it is interesting to note that in the same source module I found the following code if ((bentry = (BENTRY *)GetEntryBlock() ) != NULL) Why does a programmer in one case use (char *) pointer and in another case use (BENTRY *) pointer when compares with NULL? It is strange... Vladimir Grigoriev "Vladimir Grigoriev" wrote in message news:434ba00f$1@newsgroups.borland.com... > Thank Ed > But another question arises. > If benrty is equal to NULL why below the checking the following statement > is present > bentry->key = key ? > It is executed for any bentry (NULL or not NULL). > Maybe it is simply a bug? > > Vladimir Grigoriev > > > "Ed Mulroy" wrote in message > news:434b9d74$1@newsgroups.borland.com... > > Before the 1986 provisional C standard many compilers used C as taught in > > version 1 of the K&R book. It used this for NULL, > > #define NULL ((char *)0) > > > > The pre-1986 compilers normally did little type checking. Later compilers > > are more strict. > > > > The cast in this line: > > if ((char *) bentry == NULL ) > > is used to allow comparing the pointer to NULL when the pointer is not a > > char* type but NULL is a char* type. > > > > Compilers which conform to ANSI C, C as used since 1986 use > > #define NULL 0 > > and with them it is valid for any pointer type to be compared to zero. > > > > . Ed > > > > > Vladimir Grigoriev wrote in message > > > news:434b8037@newsgroups.borland.com... > > > > > > I get an old-style C program and cannot understand some code. > > > Here it is. > > > > > > typedef struct BlockEntry > > > { > > > struct BlockEntry * next; > > > char name[4]; > > > unsigned long key; > > > int lock; > > > } BEntry; > > > > > > > > > int SomeFunction( bentry ) > > > BEntry * bentry; > > > { > > > unsigned long key; > > > > > > if ((char *) bentry == NULL ) > > > key = ONE_CONSTANT; > > > else > > > key = ANOTHER_CONSTANT; > > > > > > /* some code that I have skipped */ > > > > > > bentry->key = key; > > > > > > return 0; > > > } > > > > > > I cannot understand the following code > > > if ((char *) bentry == NULL ) > > > What did a programmer want to say? > > > Is the value of (char *)bentry is different form the value of bentry? > > > > > > .