Передача структур указателем в C89 - PullRequest
3 голосов
/ 09 марта 2010

Я работаю с компилятором C89, и я сталкиваюсь с некоторой ошибкой ввода указателя.

Телефонный код:

struct cpu_state_type cpu_state;
//Stuff here....
foo()
{
    print_out_cpu(&cpu_state);
}

Print_out_cpu определен в другом месте, а файл H #include в.

struct cpu_state_type
{
  int r[12];
};
void print_out_cpu(struct cpu_state_type *c);

Я получаю ошибку:

error: incompatible type for argument 1 of 'print_out_cpu'

Насколько я понимаю, &cpu_state возвращает тип cpu_state_type*, поэтому я запутался.

Ответы [ 2 ]

1 голос
/ 10 марта 2010

Вы уверены, что в прототипе есть *? Если я скомпилирую (gcc -std=c89) следующий код, я получу именно эту ошибку:

  struct cpu_state_type {
     int r[12];
  };

  // note that it is the structure as the param here (not the pointer)
  void print_out_cpu(struct cpu_state_type c);
  struct cpu_state_type cpu_state;

  foo()
  {
     print_out_cpu(&cpu_state);
  }
0 голосов
/ 09 марта 2010

Я не вижу никаких проблем, поэтому мне интересно, если это ошибка в вашем операторе включения или в файле и т. Д.

Будет трудно определить причину ошибки, не видя больше источника. Попробуйте создать исходный файл, например:

# include struct cpu_state_type cpu_state;

void foo () {
print_out_cpu (& cpu_state); }

Если это не вызывает проблемы, продолжайте добавлять вещи, пока это не произойдет. Если это вызывает проблему, извлеките соответствующие части файла заголовка в свой источник (и удалите #include) и попробуйте снова.

...