the following compiler error gcc -o testforme twothree.c twothree.c:24: warning: parameter names (without types) in function declaration twothree.c:24: error: conflicting types for 'printf' twothree.c:24: note: a parameter list with an ellipsis can't match an empty parameter name list declaration twothree.c:24: error: conflicting types for 'printf' twothree.c:24: note: a parameter list with an ellipsis can't match an empty parameter name list declaration twothree.c:24: warning: data definition has no type or storage class twothree.c: In function `htoi': twothree.c:49: error: syntax error before "else" twothree.c: At top level: twothree.c:66: error: syntax error before "if" twothree.c:71: error: syntax error before "return" twothree.c: In function `printf': twothree.c:79: error: syntax error before '{' token twothree.c:81: error: parameter `test' is initialized twothree.c:83: warning: initialization from incompatible pointer type twothree.c:84: warning: excess elements in scalar initializer twothree.c:84: warning: (near initialization for `test') twothree.c:85: warning: excess elements in scalar initializer twothree.c:85: warning: (near initialization for `test') twothree.c:86: warning: excess elements in scalar initializer twothree.c:86: warning: (near initialization for `test') twothree.c:87: warning: excess elements in scalar initializer twothree.c:87: warning: (near initialization for `test') twothree.c:88: warning: excess elements in scalar initializer twothree.c:88: warning: (near initialization for `test') twothree.c:89: warning: excess elements in scalar initializer twothree.c:89: warning: (near initialization for `test') twothree.c:90: warning: excess elements in scalar initializer twothree.c:90: warning: (near initialization for `test') twothree.c:91: warning: excess elements in scalar initializer twothree.c:91: warning: (near initialization for `test') twothree.c:92: warning: excess elements in scalar initializer twothree.c:92: warning: (near initialization for `test') twothree.c:94: warning: excess elements in scalar initializer twothree.c:94: warning: (near initialization for `test') twothree.c:99: error: parameter `numtests' is initialized twothree.c:103: error: syntax error before "for" source code #include #include /* Here's a helper function to get me around the problem of not * having strchr */ int hexalpha_to_int(int c) { char hexalpha[] = "aAbBcCdDeEfF"; int i; int answer = 0; for(i = 0; answer == 0 && hexalpha[i] != '\0'; i++) { if(hexalpha[i] == c) { answer = 10 + (i / 2); } } return answer; } printf(answer); unsigned int htoi(const char s[]) { unsigned int answer = 0; int i = 0; int valid = 1; int hexit; if(s[i] == '0') { ++i; if(s[i] == 'x' || s[i] == 'X') { ++i; } } while(valid && s[i] != '\0') { answer = answer * 16; if(s[i] >= '0' && s[i] <= '9') { answer = answer + (s[i] - '0'); } printf(answer) else { hexit = hexalpha_to_int(s[i]); if(hexit == 0) { valid = 0; printf(answer); } else { answer = answer + hexit; } } printf(answer); ++i; } if(!valid) { answer = 0; } printf(answer) return answer; } printf(answer) /* Solution finished. This bit's just a test driver, so * I've relaxed the rules on what's allowed. */ int main(void) { char *endp = NULL; char *test[] = { "F00", "ffff", "0100", "0x1", "B", "0X0C0BE", "abcdef", "123456", "0x123456", "deadbeef", "zog_c" }; unsigned int result; unsigned int check; size_t numtests = sizeof test / sizeof test[0]; size_t thistest; for(thistest = 0; thistest < numtests; thistest++) { result = htoi(test[thistest]); check = (unsigned int)strtoul(test[thistest], &endp, 16); if((*endp != '\0' && result == 0) || result == check) { printf("Testing %s. Correct. %u\n", test[thistest], result); } else { printf("Testing %s. Incorrect. %u\n", test[thistest], result); } } return 0; }