Проверка, существует ли функция stati c во время компиляции - PullRequest
1 голос
/ 31 января 2020

функция. c (я не могу редактировать этот файл)

#define FOO    1

#if FOO == 1
    void Foo() {}
#endif

cpp

class MyClass
{
#if FOO == 1
    void CppFoo()
    {
        Foo();
    }
#endif
}

Я хочу сделать то же самое, но без использования определения TEST в основном файле. cpp

Что я хочу сделать:

class MyClass
{
#if (extern "c" Foo() exist)
    void CppFoo()
    {
        Foo();
    }
#endif
}

Метод CppFoo() не нужно будет объявлять, если функция stati c Foo() не была объявлена.

Как я могу это сделать?

1 Ответ

2 голосов
/ 31 января 2020

Вы можете использовать слабый атрибут, например:

файл a. c:

#include <stdio.h>

int foo() __attribute__ ((weak));
int foo() {}

int main(int argc, char** argv)
{
    foo();
}

Файл b. c:

#include <stdio.h>

int foo () {
    printf("Hello Wurld!\n");
}

Теперь, если вы не компилируете и не связываете ссылку b. c, то вызывается функция по умолчанию (no-op) foo(), в противном случае функция foo() from b. c.

...