All pastes #119389 Raw Edit

allix

public text v1 · immutable
·published 2006-08-06 20:59 UTC
rendered paste body
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 <stdio.h>
#include <stdlib.h>

/* 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;
}