views:

34

answers:

1

The title pretty much says it all. The precise error message that seems to be the root of it is:

util.h:4: error: expected declaration specifiers or ‘...’ before ‘size_t’

The header in question is:

#ifndef UTIL_H
#define UTIL_H

void print_array(void*, int, size_t, void (*)(void*));
extern void print_int(void*);
extern void print_float(void*);

#endif /* UTIL_H */

If I compile the following file with gcc -Wall -c util.c the compiler silently creates an object file.

#include <stdio.h>
#include "util.h"

void print_array(void* a, int length, size_t size, void (*print)(void*)) {
  unsigned int i;
  for (i = 0; i < length; i++) {
    print(a + i*(unsigned int)size);
  }
  printf("\n");
}

void print_int(void* i) {
  int* a = (int*) i;
  printf(" %i ", *a); 
}

void print_float(void* f) {
  float* a = (float*) f;
  printf(" %f ", *a);
}

If I include it with any other file, I get the aforementioned error and a bunch of other ones. The one I've provided comes first. Everything I've googled about it says that it's the result of a syntax error on a previous line but it was happening when it was the first line in the file. I can see that if I get this error knocked out, then all the other ones will go away as they have to do with print_array being called with the wrong number or type of arguments (which it isn't).

+3  A: 

size_t isn't defined until you include stddef.h. Your header should probably include that first to guarantee it's defined. (As it stands, you're just getting "lucky" and having other includes that will eventually define it included first, so it doesn't cause a problem.)

GMan
oi this is embarrasing. I have to wait ten minutes to accept your answer. If anybody as a rep to spare, I deserve a downvote or two for this.
aaronasterling
@aaronasterling, don't sweat it. Sometimes the best part about programming is when you get to feel smart and dumb at the same time. ;-)
Carl Norum