【发布时间】:2020-05-17 04:12:25
【问题描述】:
function.c(我无法编辑此文件)
#define FOO 1
#if FOO == 1
void Foo() {}
#endif
cpp
class MyClass
{
#if FOO == 1
void CppFoo()
{
Foo();
}
#endif
}
我想做同样的事情,但不使用 main.cpp 文件中的定义 TEST
我想做什么:
class MyClass
{
#if (extern "c" Foo() exist)
void CppFoo()
{
Foo();
}
#endif
}
如果尚未声明静态函数 Foo(),则无需声明 CppFoo() 方法。
我该怎么做?
【问题讨论】:
-
请选择一种编程语言。
-
你的意思是“编译时间”还是“链接时间”? “存在”是指“已定义”还是“已声明”?编译时可以检测到已声明但它无法洞察是否已定义,因为函数是否已定义取决于您传递给链接器的内容。
-
你没有静态函数,你有一个带有外部链接的全局函数。由于 C++ 在翻译单元级别上运行,因此无法确定给定翻译单元之外的任何内容。你想要的都是不可能的。
-
请注意,即使定义了函数,C++ 代码也不会工作,除非有声明
extern "C" void Foo();。请记住,在 C 中,void Foo();和void Foo(void);是不一样的! -
@RaymondChen 我的意思是“声明”,我编辑了我的问题以使其更易于理解。
标签: c++ compile-time weak-linking