什么是外部联系和内部联系?

什么是外部联系和内部联系?

我想了解一下对外联系和内部联系及其区别。

我也想知道

const默认情况下,变量内部链接,除非另有声明为extern.


慕的地10843
浏览 1581回答 3
3回答

慕少森

编写实现文件时(.cpp, .cxx等等)您的编译器生成一个翻译单位..这是实现文件中的对象文件,再加上所有的标头。#includeD在里面。内部联动仅指一切在翻译单位的范围内.外部联动指存在于特定翻译单位之外的事物。换句话说,可通过整个程序访问,它是所有翻译单元(或对象文件)的组合。

四季花海

如杜德瓦 外部链接意味着符号(函数或全局变量)在整个程序中都是可访问的,并且内部链接意味着它只能在一个翻译单位.属性显式控制符号的链接。extern和static关键词。如果未指定链接,则默认链接为extern对于非-const符号和static(内部)const符号。// in namespace or global scopeint i; // extern by defaultconst int ci; // static by defaultextern const int eci;  // explicitly externstatic int si; // explicitly static// the same goes for functions (but there are no const functions)int foo();   // extern by defaultstatic int bar(); // explicitly static注意,与其使用static对于内部连接,最好使用匿名命名空间你也可以把class埃斯。匿名名称空间的链接在C+98和C+11之间发生了变化,但最主要的是它们无法从其他翻译单元获得。namespace {    int i; // external linkage but unreachable from other translation units.    class invisible_to_others { };}

红颜莎娜

全局变量外部联动默认情况下。它的作用域可以扩展到文件,而不是通过提供匹配来包含它。外露在另一个文件中声明。全局变量的作用域可以限制为包含其声明的文件,方法是以关键字作为声明的前缀。静态..这些变量据说有内部联动.考虑以下例子:1.cppvoid&nbsp;f(int&nbsp;i);extern&nbsp;const&nbsp;int&nbsp;max&nbsp;=&nbsp;10;int&nbsp;n&nbsp;=&nbsp;0;int&nbsp;main(){ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a; &nbsp;&nbsp;&nbsp;&nbsp;//... &nbsp;&nbsp;&nbsp;&nbsp;f(a); &nbsp;&nbsp;&nbsp;&nbsp;//... &nbsp;&nbsp;&nbsp;&nbsp;f(a); &nbsp;&nbsp;&nbsp;&nbsp;//...}函数f的签名将f声明为具有外部联动(默认)其定义必须在本文件后面或其他翻译单位中提供(如下所示)。MAX被定义为整数常量。常量的默认链接是内部..它的链接用关键字更改为外部。外露..所以现在max可以在其他文件中访问。N被定义为整数变量。外部函数体定义的变量的默认链接是外部.2.cpp#include&nbsp;<iostream>using&nbsp;namespace&nbsp;std;extern&nbsp;const&nbsp;int&nbsp;max;extern&nbsp;int&nbsp;n;static&nbsp;float&nbsp;z&nbsp;=&nbsp;0.0;void&nbsp;f(int&nbsp;i){ &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;int&nbsp;nCall&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a; &nbsp;&nbsp;&nbsp;&nbsp;//... &nbsp;&nbsp;&nbsp;&nbsp;nCall++; &nbsp;&nbsp;&nbsp;&nbsp;n++; &nbsp;&nbsp;&nbsp;&nbsp;//... &nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;max&nbsp;*&nbsp;z; &nbsp;&nbsp;&nbsp;&nbsp;//... &nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;"f()&nbsp;called&nbsp;"&nbsp;<<&nbsp;nCall&nbsp;<<&nbsp;"&nbsp;times."&nbsp;<<&nbsp;endl;}马克斯被宣布外部联动..max的匹配定义(具有外部链接)必须出现在某个文件中。(如1.cpp所示)N被宣布为外部联动.Z是定义作为全局变量内部联动.nCall的定义指定nCall是一个在函数f()的调用中保留其值的变量。与具有默认自动存储类的局部变量不同,nCall在程序开始时只初始化一次,而不对f()的每次调用初始化一次。存储类说明符静态影响局部变量的生存期,而不是其作用域。注:关键词静态扮演双重角色。在全局变量定义中使用时,它指定内部联动..当在局部变量定义中使用时,它指定变量的生存期将是程序的持续时间,而不是函数的持续时间。希望能帮上忙!
打开App,查看更多内容
随时随地看视频慕课网APP