void foo(bool var) {
bar(var);
}
Либо функция глобальная, либо нет. Вы должны принять решение; вы не можете иметь и то и другое.
Если это просто оболочка в заголовке, тогда вы можете сделать это stati c inline:
// bar.h
static inline void foo (bool var)
{
bar (var);
}
Должно быть ясно, что вы не можете использовать это вместе с различными определениями / объявлениями в foo.h
.
Если вы просто хотите, чтобы функция, которая вызывается как foo
, использовала bar
в качестве имени сборки, то вы можете использовать следующее C -extension из GNU - C:
// bar.h
void foo (bool) __asm ("bar");
Это означает, что bar
будет именем сборки foo
. Это может избежать дополнительного шага вызова. Конечно, это также нельзя использовать с конфликтующим определением / объявлением foo
. Также обратите внимание, что вам может потребоваться изменить имя сборки, например, платформы i386 обычно используют начальный _
(подчеркивание), чтобы вам пришлось использовать имя сборки _bar
. А для C ++ вам понадобится искаженное имя.
Итог: В каждом модуле компиляции (модуле) вы должны решить, какую реализацию foo
вы хотите использовать, и в зависимости от для этого включите либо foo.h
, либо конфликтующий bar.h
.