gpt4 book ai didi

c++ - 除非提示,否则我的项目如何不提示 Unresolved 不相关性?

转载 作者:行者123 更新时间:2023-11-30 03:40:54 25 4
gpt4 key购买 nike

我有以下代码:

#include <iostream>

extern "C" int calcSum_(int a, int b, int c);

int main()
{
printf("Hello World");
return 1;
}

为什么在我的项目中没有其他源文件包含 calcSum_ 函数的情况下,以下代码会生成?当我尝试执行以下操作时它确实会提示:

int result = calcSum_(1,2,3);

构建不涉及创建一个可以运行的可执行文件吗?这不涉及链接吗?它如何构建而不会出错?为什么我需要向我的链接器“突出显示”缺少该函数?

最佳答案

传统上来说,链接器做的是相当低级的工作。目标文件包含一个导出符号列表(连同它们的地址)和一个缺失符号列表(连同必须在代码中替换已解析地址的地址)。链接器必须将它们放在一起,在其他目标文件中找到丢失的符号并进行替换。

现在,如果编译器看到一个函数原型(prototype)但没有使用它,则信息不会传递给链接器——目标文件不需要那个符号,不需要进行替换——所以链接器有无法知道某些函数已声明但未定义。

顺便说一句,这种行为在一些 C++03 习语中被积极利用——特别是“禁用的复制构造函数”;您声明复制构造函数以禁用自动生成的复制构造函数,但您没有实现它,因此在有人不小心尝试使用它的情况下会发出链接错误。

关于c++ - 除非提示,否则我的项目如何不提示 Unresolved 不相关性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37734248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com