Hacker News new | ask | show | jobs
by dlazar 5269 days ago
Only commenting on the coding style: that kind of formatting is just looking for trouble. Quick, tell me which of the functions below contains a bug?

  //return = strlen(target)
  unsigned strmcat(char *target, const char *source, unsigned length) {
    const char *origin = target;
    while(*target && length) target++, length--;
    return (target - origin) + strmcpy(target, source, length);
  }

  //return = strlen(target)
  unsigned strmcat(char *target, const char *source, unsigned length) {
    const char *origin = target;
    while(*target && length) target++; length--;
    return (target - origin) + strmcpy(target, source, length);
  }
How about this?

  //return = strlen(target)
  unsigned strmcat(char *target, const char *source, unsigned length) {
    const char *origin = target;
    while(*target && length)
      target++, length--;
    return (target - origin) + strmcpy(target, source, length);
  }

  //return = strlen(target)
  unsigned strmcat(char *target, const char *source, unsigned length) {
    const char *origin = target;
    while(*target && length)
      target++;
    length--;
    return (target - origin) + strmcpy(target, source, length);
  }
Granted, it's a tiny example, but you're going to be writing fewer bugs in the long run if you avoid being clever. So here are two rules to start with:

1. Never put more than one statement on one line.

2. Never use the comma operator outside the "for" syntax.