vs项目中的引用是什么意思

来源:互联网 发布:淘宝营销手段 编辑:程序博客网 时间:2024/06/12 01:05

我搬自知乎上的问答,链接如下

点击打开链接

这一个是来自链接的术语,引用即reference.

举一个简单的例子:

// a.cppextern int foo(); // in the foo.oint main(){   foo();}

我们说a.cpp里面使用外面的foo函数,即foo函数本身的定义不在a.cpp里面,那么在链接层面我们会说a.cpp(或者更准确的说是编译出来的目标文件a.o)引用了外部foo函数的符号(Symbol)[1],即我们经常看到的symbol referenced from....,也会看到的错误unresolved symbol of .......。添加引用则是什么呢?如这里的例子,a.cpp(或者更准确的说是编译出来的a.o),链接器需要找到main函数里面使用的foo函数符号,而在a.o里面没有,那么我们则需要添加包含有foo函数的符号,如foo.o,那么你就可以使用ld a.o foo.o,或者说在一个静态库foo.a中,那么则是ld a.o foo.a 所以,添加引用即是添加所需要(引用)的符号用于链接器查找与使用,最后生成目标文件。

推荐书籍:程序员的自我修养。这本书告诉了程序的编译、链接等原理。

[1] 符号,Symbol,这一个来自编译层面的术语。编译器会把源代码层面的函数等作为标记符(identifier),然后把这些标记符放入一个名叫符号表(Symbol Table)的数据结构中。

在VS中,添加引用还隐式地指定了项目之间编译顺序的偏序关系,被引用的工程会先编译

简单的理解的话,可以说把别人写好的程序集添加入自己的程序中。

!答主不熟悉 C++,但 C# 中,引用可是相当有用。

比如我今天从 GitHub 上 Fork 了项目 A。
项目 A 中有很多可供调用的方法,他自己也给自己写有方法。那么*他自己给自己写的方法*,*他自己*是可以调用的。
我将项目 A, Clone 到 本地。
再给我自己的项目 B 添加 A 的引用。
那么等于说,我把 B 的代码 添到了 A 中,现在我可以使用*他给自己写的方法*了。

再举个实际例子。
我有 A 项目 和 B 项目 两个项目。
A 项目 → 直接编译 → A.dll
我在设计 A 项目时,A 项目内有一个 "publicMethods.cs"
这里面包含一个 class, 里面又包含各种常用函数。
比如 public static string time(){return Now.ToString();}
而 A 项目内还有一个 "referring.cs".
referring.cs 里 有一个 public static string gRslt()
而 gRslt() 可以调用 "publicMethods.cs" 里的 public static string gTime(), 因为它们在同一个项目下。
那么现在我编译 A.dll.
我再把 A.dll 添入 B 项目中。
那么现在 B 项目也可以使用 gRslt() 和 gTime() 这两个函数了。
因为我把 A.dll 「引用」到了 B 项目 中。
那么我就可以在 B 项目 中用到 A 项目 的公共函数。

注: C#, Visual Basic .NET 编译后均为 IL 文件(托管代码),所以可以互相自由引用。
所以 C# 和 Visual Basic .NET 也可以很轻松地互相翻译 ——
因为二者编译出来几乎没区别好吗ヾ(゚∀゚ゞ)





0 0
原创粉丝点击