今天我偶然发现了一个好奇的虫子,到目前为止我已经设法避开了.
file1.cpp:
#include <iostream>
inline void print() { std::cout << "Print1\n"; }
void y() { print(); }
Run Code Online (Sandbox Code Playgroud)
file2.cpp:
#include <iostream>
inline void print() { std::cout << "Print2\n"; }
void x() { print(); }
Run Code Online (Sandbox Code Playgroud)
main.cpp中:
int x();
int y();
int main(){
x();
y();
}
Run Code Online (Sandbox Code Playgroud)
输出:
Print1 (Expected Print2)
Print1
Run Code Online (Sandbox Code Playgroud)
因为print()具有内联链接,所以不会产生多重定义错误(使用编译g++ -Wall file1.cpp file2.cpp main.cpp),并且重复符号会以静默方式折叠.我看到的实际情况是使用内联类方法,而不是显式内联函数,但效果是相同的.
我想知道是否有一个链接器选项或类似的东西,这将允许我在出现这种类型的错误时产生警告?
| 归档时间: |
|
| 查看次数: |
287 次 |
| 最近记录: |