Заголовок C вызывает ошибки при включении в некоторые файлы, но не в другие - PullRequest
1 голос
/ 04 сентября 2010

Название в значительной степени говорит само за себя.Точное сообщение об ошибке, которое, кажется, является его корнем:

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 вызывается с неправильным числом или типом аргументов (а это не так).

1 Ответ

3 голосов
/ 04 сентября 2010

size_t не определено, пока вы не включите stddef.h.Ваш заголовок, вероятно, должен сначала включать это, чтобы гарантировать, что он определен.(В настоящее время вам просто «везет», и у вас есть другие включения, которые в конечном итоге определят его включенным первым, поэтому это не вызовет проблемы.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...