Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 检查编译时是否存在静态函数_C++_Compile Time_Weak Linking - Fatal编程技术网

C++ 检查编译时是否存在静态函数

C++ 检查编译时是否存在静态函数,c++,compile-time,weak-linking,C++,Compile Time,Weak Linking,函数。c(我无法编辑此文件) cpp class MyClass { #if FOO == 1 void CppFoo() { Foo(); } #endif } 我想做同样的事情,但不使用main.cpp文件中的defineTEST 我想做的是: class MyClass { #if (extern "c" Foo() exist) void CppFoo() { Foo(); } #endif } 如果静态

函数。c(我无法编辑此文件)

cpp

class MyClass
{
#if FOO == 1
    void CppFoo()
    {
        Foo();
    }
#endif
}
我想做同样的事情,但不使用main.cpp文件中的define
TEST

我想做的是:

class MyClass
{
#if (extern "c" Foo() exist)
    void CppFoo()
    {
        Foo();
    }
#endif
}
如果静态函数
Foo()
尚未声明,则不必声明
CppFoo()
方法


如何执行此操作?

您可以使用弱属性,例如:

文件a.c:

#include <stdio.h>

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

int main(int argc, char** argv)
{
    foo();
}
#包括
int foo()uuu属性_uuu((弱));
int foo(){}
int main(int argc,字符**argv)
{
foo();
}
b.c.文件:

#include <stdio.h>

int foo () {
    printf("Hello Wurld!\n");
}
#包括
int foo(){
printf(“Hello Wurld!\n”);
}

现在,如果您不编译并链接b.c,那么将调用默认(无操作)函数
foo()
,否则将调用b.c中的函数
foo()

请选择一种编程语言。您是指“编译时”还是“链接时”?“存在”是指“已定义”还是“已声明”?编译时可以检测已声明的函数,但无法洞察是否已定义,因为函数是否已定义取决于传递给链接器的内容。您没有静态函数,而是具有外部链接的全局函数。由于C++在翻译单元级上运行,所以无法确定给定翻译单元之外的任何内容。你想要的是不可能的。注意,即使函数被定义,C++代码也不能工作,除非有一个声明<代码>外“c”空洞()。代码>。记住,在C中,
void Foo()
无效Foo(无效)不一样@Raymond当我的意思是“声明”时,我编辑了我的问题以使其更容易理解。对不起,我修改了我的初始问题以适合我的具体情况。@上面的Parmi93解决方案仍然有效,假设“存在”意味着“定义”。
#include <stdio.h>

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