Включение заголовков в заголовочный файл не делает его включенным в файл реализации - или я просто использую неправильную команду для компиляции? - PullRequest
0 голосов
/ 23 ноября 2011

Хорошо, у меня есть заголовок (my_prog.h), который выглядит следующим образом:

#ifndef __MY_HEADER_H
#define __MY_HEADER_H
#include <stddef.h>
typedef struct {
    size_t something;
    size_t something_else;
}
void my_func();
#endif

и файл реализации (my_prog.c), куда я помещаю:

#include "my_prog.h"
static size_t min(size_t a, size_t b) {...}
void my_func() {...}

КогдаЯ пытаюсь скомпилировать my_prog.c в объектный файл (он нужен для связи с другими файлами). Я получаю:

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘min’

Команда, которую я использую для компиляции:

gcc -c my_prog.c -o my_prog.h

нет ошибки, сказав, что он не может найти источник.Когда я включаю в файл реализации, он компилирует без проблем.

1 Ответ

3 голосов
/ 23 ноября 2011
  1. Снимите ... с корпуса функции. Их наличие - синтаксическая ошибка.

  2. Вы не указали имя typedef для структуры, и ; отсутствует:

    typedef struct {
        size_t something;
        size_t something_else;
    } foo;
      ^^^^
    
  3. В строке компиляции после -o вы указываете имя вашего заголовочного файла. Это неверно Если компиляция прошла успешно (если вы исправите 1 и 2 выше), компилятор уничтожит исходное содержимое my_prog.h и перезапишет его объектным файлом. Вместо этого сделайте:

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