Typedef в заголовочном файле, который включен несколько раз - PullRequest
3 голосов
/ 04 марта 2012

По сути, я определил и напечатал эту структуру:

typedef struct{
    void** elements;
    int numElements;
    int itemSize;
    int capacity;
    int dynamicElements;
}array;

, для которой я написал сопровождающие функции управления динамическими массивами.Тем не менее, у меня есть небольшая проблема.В различных функциях я передаю эту структуру в качестве аргумента.Для того чтобы модулировать код, мне нужно создать прототип этих функций в заголовочных файлах (и чтобы разрешить аргументы типа array, мне нужно включить «array.h» в сами эти заголовочные файлы).

Итакпосле включения всех моих заголовочных файлов, заголовочный файл «array.h» был включен несколько раз.Как и следовало ожидать, тип структуры был определен по типу несколько раз и вызывает конфликты.

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

Ответы [ 3 ]

10 голосов
/ 04 марта 2012

Использование включает охрану .

#ifndef ARRAY_H_
#define ARRAY_H_

typedef struct {
    ...
} array;

#endif
2 голосов
/ 04 марта 2012

В некоторых современных компиляторах использование #pragma once в начале заголовочного файла будет иметь тот же эффект, что идиома include guard.

2 голосов
/ 04 марта 2012

Общая идиома состоит в том, чтобы структурировать заголовки следующим образом:

#ifndef array_h_
#define array_h_

// Contents of header file go here

#endif // array_h_

Это предотвратит включение / включение заголовка более одного раза.

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