标题几乎说明了一切。似乎是其根源的准确错误消息是:
util.h:4:错误:预期声明 'size_t'之前的说明符或'...'
有问题的标题是:
#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 */
如果我使用gcc -Wall -c util.c
编译以下文件,编译器将静默创建一个目标文件。
#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);
}
如果我将它包含在任何其他文件中,我会得到上述错误和其他一些错误。我提供的那个是第一个。我用Google搜索的所有内容都说它是前一行语法错误的结果,但是当它是文件中的第一行时就会发生这种情况。我可以看到,如果我把这个错误搞砸了,那么所有其他的都会消失,因为他们必须使用错误的数字或类型的参数调用print_array
(它不是)。 / p>
答案 0 :(得分:3)
size_t
之前,未定义 stddef.h
。你的标题应该首先包括它,以保证它的定义。 (就目前而言,你只是变得“幸运”,并且有其他包含最终将其包括在内的包含,因此它不会引起问题。)