C标头包含在某些文件中但不包含其他文件时会导致错误

时间:2010-09-04 06:39:03

标签: c header

标题几乎说明了一切。似乎是其根源的准确错误消息是:

  

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>

1 个答案:

答案 0 :(得分:3)

在您加入size_t之前,未定义

stddef.h。你的标题应该首先包括它,以保证它的定义。 (就目前而言,你只是变得“幸运”,并且有其他包含最终将其包括在内的包含,因此它不会引起问题。)