Сама Платформа объекта основана на поставщике, и , разработал для работы по реляционной базе данных. Если бы Вы действительно хотели, то Вы могли бы записать Вашему собственному поставщику для EF, который читает из к XML-файлу, но это было бы огромно объем работы.
я ожидаю, что необходимо действительно смотреть на один из:
Объекта не имеет естественный , вписываются в этот сценарий.
К сожалению, не все компиляторы полностью соответствуют C99 в этой точке, даже если они утверждают, что они будут.
Соответствующий способ сделать это -
// header file. an inline declaration alone is
// not supposed to generate an external symbol
inline void toto(void) {
// do something
}
// in one .c file, force the creation of an
// external symbol
extern inline void toto(void);
Более новые версии gcc, например, будут хорошо работать с этим.
Вы можете сойти с рук для других компиляторов (претендентов), определив что-то вроде
#ifdef PRETENDER
# define inlDec static
# define inlIns static
#else
# define inlDec
# define inlIns extern
#endif
// header file. an inline declaration alone is
// not supposed to generate an external symbol
inlDec inline void toto(void) {
// do something
}
// in one .c file, force the creation of an
// external symbol
inlIns inline void toto(void);
Редактировать:
компиляторы с поддержкой C99 (обычно опция -std=c99
), что я знаю о
inline
модель inline
, если у вас нет extern
объявлений и , которые вы используете указатель на функцию в одном модуле компиляции. inline
Если используется сам по себе, в C99 inline
требуется, чтобы функция была определена в той же единице перевода, что и при ее использовании (поэтому, если вы используете ее в lib1.c, она должна быть определена в lib1.c).
Вы также можете объявить метод как static inline
(и поместить определение в файл заголовка, совместно используемый двумя исходными файлами). Это позволяет избежать проблемы множественного определения и позволяет компилятору встроить файл во все блоки перевода, где он используется (что он может или не может сделать, если вы просто объявите функцию в одном блоке перевода).
Я думаю, что вам не нужно использовать встроенное слово, когда вы определяете и объявляете функцию внутри файла заголовка, компилятор обычно принимает его как встроенный по умолчанию, если он не слишком длинный, и в этом случае он будет достаточно умен. рассматривать его как нормальную функцию.
Я думаю, что множественное определение может быть вызвано отсутствием функции «Включить охрану» в заголовочном файле.
Вы должны использовать что-то вроде этого в заголовке:
#ifndef HEADERNAME_H
#define HEADERNAME_H
void func()
{
// do things...
}
#endif