根据C ++标准,以下是完整的程序吗?
void foo();
void bar( void(*)() ) {}
int main() { bar(foo); }
如果整个程序优化已关闭,MSVC14会成功构建它,但会出现错误"未解析的外部符号void __cdecl foo(void)"如果启用了链接时间代码生成。
答案 0 :(得分:2)
那是 odr-use ,所以你需要foo
的定义。
否则函数指针应该保持什么“值”?记忆中foo
在哪里?
该定义触发它被赋予一个地址,而你却没有。