C++ 检查编译时是否存在静态函数
函数。c(我无法编辑此文件) cppC++ 检查编译时是否存在静态函数,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 } 如果静态
class MyClass
{
#if FOO == 1
void CppFoo()
{
Foo();
}
#endif
}
我想做同样的事情,但不使用main.cpp文件中的defineTEST
我想做的是:
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");
}