I've been studying "The C Programming Language" text and checking my answers here: The C Programming Language Answers To Exercises. I'm on exercise 4-2 and when I try to compile the answer given on the website, I get this error:

I'm confused because the main function is defined at the very bottom of the answer. Here is the code:[T3256@GURY Exercise.4-2]$ cc answer.c

/usr/lib/gcc/i386-redhat-linux/4.3.2/../../../crt1.o: In function `_start':

(.text+0x18): undefined reference to `main'

collect2: ld returned 1 exit status

I'd appreciate some help. Thanks.Code:/* ** Written by Dann Corbit as K&R 2, Exercise 4-2 (Page 73). ** Keep in mind that this is *JUST* a student exercise, and is ** light years away from being robust. ** ** Actually, it's kind of embarassing, but I'm too lazy to fix it. ** ** Caveat Emptor, not my fault if demons fly out of your nose, ** and all of that. */#include <ctype.h>#include <limits.h>#include <float.h>#include <signal.h>#include <stdio.h>intmy_atof(char*string,double*pnumber) { /* Convert char string to double data type. */doubleretval;doubleone_tenth =0.1;doubleten =10.0;doublezero =0.0;intfound_digits =0;intis_negative =0;char*num; /* Check pointers. */if(pnumber ==0) {return0; }if(string ==0) { *pnumber = zero;return0; } retval = zero; num = string; /* Advance past white space. */while(isspace(*num)) num++; /* Check for sign. */if(*num =='+') num++;elseif(*num =='-') { is_negative =1; num++; } /* Calculate the integer part. */while(isdigit(*num)) { found_digits =1; retval *= ten; retval += *num -'0'; num++; } /* Calculate the fractional part. */if(*num =='.') {doublescale = one_tenth; num++;while(isdigit(*num)) { found_digits =1; retval += scale * (*num -'0'); num++; scale *= one_tenth; } } /* If this is not a number, return error condition. */if(!found_digits) { *pnumber = zero;return0; } /* If all digits of integer & fractional part are 0, return 0.0 */if(retval == zero) { *pnumber = zero;return1; /* Not an error condition, and no need to * continue. */ } /* Process the exponent (if any) */if((*num =='e') || (*num =='E')) {intneg_exponent =0;intget_out =0;longindex;longexponent =0;doublegetting_too_big = DBL_MAX * one_tenth;doublegetting_too_small = DBL_MIN * ten; num++;if(*num =='+') num++;elseif(*num =='-') { num++; neg_exponent =1; } /* What if the exponent is empty? Return the current result. */if(!isdigit(*num)) {if(is_negative) retval = -retval; *pnumber = retval;return(1); } /* Convert char exponent to number <= 2 billion. */while(isdigit(*num) && (exponent < LONG_MAX /10)) { exponent *=10; exponent += *num -'0'; num++; } /* Compensate for the exponent. */if(neg_exponent) {for(index =1; index <= exponent && !get_out; index++)if(retval < getting_too_small) { get_out =1; retval = DBL_MIN; }elseretval *= one_tenth; }elsefor(index =1; index <= exponent && !get_out; index++) {if(retval > getting_too_big) { get_out =1; retval = DBL_MAX; }elseretval *= ten; } }if(is_negative) retval = -retval; *pnumber = retval;return(1); } /* ** Lame and evil wrapper function to give the exercise the requested ** interface. Dann Corbit will plead innocent to the end. ** It's very existence means that the code is not conforming. ** Pretend you are a C library implementer, OK? But you would fix ** all those bleeding gaps, I am sure. */doubleatof(char*s) {doubled =0.0;if(!my_atof(s, &d)) {#ifdef DEBUGfputs("Error converting string in [sic] atof()", stderr);#endifraise(SIGFPE); }returnd; }#ifdef UNIT_TESTchar*strings[] = { "1.0e43", "999.999", "123.456e-9", "-1.2e-3", "1.2e-3", "-1.2E3", "-1.2e03", "cat", "",0};intmain(void) {inti =0;for(; *strings[i]; i++) printf("atof(%s) = %g\n", strings[i], atof(strings[i]));return0; }#endif