gpt4 book ai didi

c# - C#编译如何避免需要头文件?

转载 作者:IT王子 更新时间:2023-10-29 04:11:39 26 4
gpt4 key购买 nike

我已经从事了C#开发人员的职业生涯。作为一名学生,我偶尔使用C,但并未深入研究其编译模型。最近,我跳上了潮流,开始研究Objective-C。我的第一步仅使我意识到自己现有知识中的漏洞。

根据我的研究,C/C++/ObjC编译需要预先声明所有遇到的符号。我也了解 build 是一个两步过程。首先,您将每个单独的源文件编译成单独的目标文件。这些目标文件可能具有未定义的“符号”(通常对应于头文件中声明的标识符)。其次,将目标文件链接在一起以形成最终输出。这是一个相当高级的解释,但足以满足我的好奇心。但是我也想对C#构建过程有一个类似的高级理解。

问: C#构建过程如何解决对头文件的需求?我想也许编译步骤会两次通过?

(编辑:在此处跟踪问题How do C/C++/Objective-C compare with C# when it comes to using libraries?)

最佳答案

我看到这个问题有多种解释。我回答了解决方案内的解释,但是让我用我所知道的所有信息进行填写。

“头文件元数据”存在于已编译的程序集中,因此您添加引用的任何程序集都将允许编译器从那些程序集中提取元数据。

至于当前解决方案中尚未编译的内容,它将进行两次遍历编译,首先读取 namespace ,类型名称,成员名称,即。除了代码之外的所有内容。然后,当 checkout 时,它将读取代码并进行编译。

这使编译器知道存在(不存在)(在其Universe中)。

要查看有效的两遍编译器,请测试以下代码,该代码有3个问题,两个与声明相关的问题和一个代码问题:

using System;

namespace ConsoleApplication11
{
class Program
{
public static Stringg ReturnsTheWrongType()
{
return null;
}

static void Main(string[] args)
{
CallSomeMethodThatDoesntExist();
}

public static Stringg AlsoReturnsTheWrongType()
{
return null;
}
}
}

请注意,编译器只会提示找不到的两种 Stringg类型。如果修复了这些问题,则它将提示无法找到的Main方法中调用的方法名称。

关于c# - C#编译如何避免需要头文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917935/

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