У меня есть функция (давайте назовем ее void foo(void) {}
), что я хочу быть inline.But я определил ее внутри .cpp-файла.
Я не могу переместить функцию в заголовок, потому что он использует другие функции из .cpp.ссылка на extern включена, но не определена
EDIT:
ниже код так же, как реальный не использует C++ функции. Я могу четко добавить:
#ifdef __cplusplus
extern "C"
#endif
Если я хотел бы, чтобы преобразовать код в C99 мне нужно только изменить свои свойства проекта (или Makefile, если вам нравится) не код. Я также спрашиваю о C++, потому что он может решить мою проблему, а c99 не может.
поэтому теги C и C++ в моем вопросе оправданы. код портативный
см: When to use extern "C" in C++?
EDIT # 2
Ok я понимаю, что я должен положить foo()
определение файла внутри заголовка. Как я могу позвонить func_a()
и func_b()
из foo()
, не перемещая их в файл заголовка? Есть ли обходной путь?
Пример
file.c/.cpp:
int func_a (int a, int b, int c) {/*...*/};
double func_b (double a, double b, double c) {/*...*/};
void foo (int a, double b) { // unction definition
//...
int myInt = func_a(a, 2, 3);
//...
double myDouble = func_b(1.5f, b, 3.5f);
//...
}
file.h:
// Something before.
void foo (int a, double b); // function declaration
// Something after.
Хочу отметить из:
- Я работаю с Visual Studio 2015.
- Я пишу относительно большой проект (~ 7000 строк кода). Это симуляция физической системы.
file.h
включен во многие другие единицы компиляции.foo(int, double)
мал и вызывает другие функции изfile.cpp
- Я хочу сделать
foo(int, double)
инлайн из-за соображения оптимизации (я в конечном итоге с помощью__forceinline__
) - Я зову
foo()
много, много раз по моей программе. Также он используется внутри нескольких циклов (по 100 кбайт итераций каждый), поэтому для этого символаfoo()
не является встроенным. - Мне больны только заголовки.
Я попытался:
file.c/.cpp:
extern inline
void foo (int a, double b) {\*...*\}; // Definition
file.h:
extern inline
void foo (int a, double b); // Declaration
, но я получаю предупреждение:
warning : extern inline function "foo" was referenced but not defined
И я не понимаю, почему я получаю это предупреждение.
Есть ли способ:
- Keep определение
foo()
в моем файле .cpp? Но все-таки сделать это рядный - движение
foo()
кfile.h
, держатьfunc_a()
иfunc_b()
внутриfile.cpp
, но сделатьfunc_a()
иfunc_b()
символы «видны» вfoo()
(! И толькоfoo()
!) Отfile.cpp
- любой другой обходной ?
Сори я все еще учусь CPP, и я не знаю, если мой вопрос ясен, или даже можно сделать функцию инлайн из .cpp файла.
C не C++ не C. Не добавлять несвязанные метки! – Olaf
@olaf, как вы видели, я не использую функции C++. extern «C» - это то, что я часто использую в своем коде. 'foo()' скорее всего, в конечном итоге также будет использовать его. Я говорил о C++, потому что meaby C++ может решить эту проблему, а c не может – cukier9a7b5
Просьба указать ссылку на стандарт C, где указан этот конструктор. Вы также не показываете это в своем коде. Прочтите [ask] и укажите [mcve]. – Olaf