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

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

点击打开链接

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

举一个简单的例子:

// a.cpp
extern int foo(); // in the foo.o
int 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 也可以很轻松地互相翻译 ——
因为二者编译出来几乎没区别好吗ヾ(゚∀゚ゞ)





  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值