2012-07-02 8 views
1

Я работаю на достаточно простую программе C с основным файлом, vector.c, vector.h, но я бег в эти вопросы:C Ресурс для программ с несколькими файлами

  • где делать Я помещал include для файла .h, если декларации, которые он предоставляет, необходимы в обоих файлах c?
  • Где я должен помещать typedefs, необходимые во всех 3 файлах?

похоже gcc жалуется, что бы ни случилось.

Может ли кто-нибудь ответить на эти вопросы или указать мне на ресурс, который я могу прочитать?

ответ

2

Где я могу поместить include для файла .h, если декларации, которые он предоставляет, необходимы в обоих файлах c?

Помещенный include заявления в каждом файле C, что требует определения заголовка, в вашем случае, в main.cиvector.c. Использование include guards всегда является хорошей идеей и требуется, если компилятор жалуется на уже определенные или размноженные символы.

Где я могу установить typedefs во всех 3 файлах?

Это зависит:

  • Если typedefs необходимы, или специфичные для вашего вектора API, а затем положить их в vector.h.
  • Если они не имеют никакого отношения к вашему векторному интерфейсу, то есть они относятся к main.c, то они, вероятно, принадлежат к ним.
  • Но вы говорите, что они необходимы для всех 3-х файлов, поэтому, если эти typedefsне являются частью вашего вектора интерфейса, то они, вероятно, принадлежат к 3-заголовка файла, например, что-то вроде common.h, которые также могут быть включены в каждый другой файл вашего проекта.
2

Очень естественно:

  • Вы включаете заголовок из любого файла C (ей) нужно.
  • typedef s являются декларациями, поэтому они очень хорошо подходят для ввода заголовочных файлов.

Иногда вам может потребоваться защита от множественного включения, если у вас есть заголовки, содержащие заголовки, но для вашего случая это не нужно. Помните, что каждый C-файл компилируется сам по себе. Не используйте #include с файлами C, конечно.

+0

+1 Я бы сбросил бит «иногда» и навел OP на описание охранников включения: гораздо легче охранять все заголовки, как если бы они были включены несколько раз, чем работать в кругах, пытаясь понять, почему ваша компиляция начала ломаться, после того, как кто-то добавил невинно выглядящий '# include' :) – dasblinkenlight

Смежные вопросы