本文目錄一覽:
- 1、c語言中的連接是什麼意思
- 2、c/c++中的標識鏈接有幾種方式 外部鏈接 內部鏈接
- 3、C語言裏面”具有外部鏈接的靜態變量”這裡的”鏈接”是什麼意思?
- 4、什麼事內部鏈接和外部鏈接,什麼事空鏈接
- 5、c語言調用外部函數連接不了
- 6、關於c語言中變量有外部鏈接內部鏈接和無 鏈接怎麼理解?
c語言中的連接是什麼意思
c語言中的連接指de是將obj文件生成為exe文件。
##可以作為連接字符串的連接符,##為宏擴展提供了一種連接實際變元的。如果替換文本中的參數用##相連,那麼參數就被實際變元替換,##與前後的空白符被刪除,並對替換後的結果重新掃描。
例如,下面定義的宏paste用於連接兩個變元:
#definepaste(front,back)front##back
從而宏調用paste(name,1)的結果是建立單詞name1。
擴展資料
C語言連接符的使用:
#includestdio.h
#defineOperations(x)operation_##x//##是黏貼字符串
intOperations(sum)(intx,inty){//operation_sum(intx,inty)
returnx+y;
}
intOperations(sub)(intx,inty){//operation_sub(intx,inty)
returnx-y;
}
intOperations(mul)(intx,inty){//operation_mul(intx,inty)
returnx*y;
}
floatOperations(div)(floatx,floaty){//operation_div(intx,inty)
floatresult;
result=x/y;
returnresult;
}
#definePrint(x)printf(“%s,%d\n”,#x,x);//#表示將參數轉變為字符串
intmain()
{
intx;
floaty;
x=Operations(sum)(10,20);
printf(“x=%d\n”,x);
x=operation_sum(100,20);
printf(“x=%d\n”,x);
x=Operations(sub)(10,20);//operation_sub(10,20)也可以
printf(“x=%d\n”,x);
x=Operations(mul)(10,20);//operation_mul(10,20)也可以
printf(“x=%d\n”,x);
y=Operations(div)(11,20);//operation_div(11,20)也可以
printf(“y=%lf\n”,y);
Print(100);
return0;
}
c/c++中的標識鏈接有幾種方式 外部鏈接 內部鏈接
當一個實現文件(.cpp …)編譯時,預處理器(CPP)首先遞歸的包含頭文件,形成一個保含有所有必要信息的單個源文件. 這個源文件稱為 編譯單元.
內部連接 如果一個名稱對於它的編譯單元來說是局部的, 並且在連接的時候不可能與其它編譯單元中的同樣的名稱相衝突,則這個名稱具有內部連接.即具有內部連接的名稱不會被帶到目標文件中.
外部連接 在一個多文件程序中,如果一個名稱在連接時可以和其他編譯單元交互,那麼這個名稱就具有外部連接. 即具有外部連接的名稱會引入到目標文件中,由連接程序進行處理.這種符號在整個程序中必須是惟一的.
具有內部連接的定義包括:
具有外部連接的定義包括:
聲明本身不會將任何符合引入目標文件,所以聲明都是內部連接的.
某些聲明可以激活對一個外部連接定義的訪問,也許我們會很隨便的說這些聲明具有外部連接,如:
int f();
extern int i;
class Point { static int s_numPoints; … }; /* 類靜態數據成員聲明具有外部連接, 該數據必須在另一個地方被定義,如: point.c int Point::s_numPoints; */
還有一些聲明即不把什麼符號引入目標文件,也不能用來激活對外部連接定義的訪問,我們常常稱這類聲明具有內部連接,
typedef int INT;
class Point;
struct Point;
把一個帶有外部連接的定義放在 .h 文件中都會引起錯誤.由於類的聲明和定義都是內部連接的,一般都放在 .h 文件中.
非內聯的類成員函數.如: Point Point::operator+=(const Point right) { … }
非內聯,非靜態的自由函數. 如: Point operator+(const Point left, const Point right) { … }
非靜態的全局定義.
加 static 前綴的全局變量定義.如: static int x;
枚舉類型的定義.如: enum Boolean {NO,YES };
類的定義. 如: class Point { int d_x; int d_y; … };
內聯函數的定義.如: inline int operator==(const Point left,const Pointright) { … }
union的定義.
名字空間中const常量定義
特別說明:
C++規定,有const修飾的變量,不但不可修改,還都將具有內部鏈接屬性,也就是只在本文件可見。(這是原來C語言的static修飾字的功能,現在const也有這個功能了。)又補充規定,extern const聯合修飾時,extern將壓制const這個內部鏈接屬性。於是,extern char const s[]將仍然有外部鏈接屬性,但是還是不可修改的。 具體使用方法如下:
在cpp文件中:extern const int a=1;
在要使用該常量的cpp文件中:extern const int a;//也可以將其放到頭文件中
coutaendl;
當用extern修飾const變量將強製為其分配內存,因為extern表示採用外部鏈接,因此其必須有某個地址保存其值。
C語言裏面”具有外部鏈接的靜態變量”這裡的”鏈接”是什麼意思?
首先從靜態變量說起. C語言裏面靜態變量有三種: 分別是外部鏈接性,內部鏈接性和無鏈接性.
聲明外部鏈接的變量的方法是在代碼塊外面聲明它. 此變量是全局變量,多文件中亦可用.
聲明內部鏈接的變量的方法是在代碼塊外面聲明它並加上static限定符. 此變量是全局變量,但僅在本文件中可用.
聲明無鏈接的變量的方法是在代碼塊裏面聲明它並加上static限定符. 此變量是局部變量,但僅在本代碼塊中可用.
例:
#include………..
int global=1; //聲明外部鏈接的變量
static int global2 //聲明內部鏈接的變量
int func()
{
int global=5; //聲明的內部變量和全局變量重名,調用時將會隱藏全局的global;
coutglobal; //是內部定義的global的值而不是外面的值.
//如何引用外面的變量呢???
cout::global; //可用作用域解析符(::)來說明你要輸出的外面的全局變量.
static int global3; //聲明無鏈接的變量
}
int main()
{
extern int alobal; //在本文件中此句可選.此句的意思為你需要引用外部的變量global;
global=8; //直接引用全局變量.
}
望採納!!!!
什麼事內部鏈接和外部鏈接,什麼事空鏈接
C語言中的變量分為外部鏈接、內部鏈接、空連接三種:
(1)外部鏈接:外部鏈接的變量可以在多個文件中使用;
(2)內部鏈接:內部鏈接的變量只能在一個文件中使用;
(3)空鏈接:由定義變量的代碼塊作用域所私有;
文件作用域變量前面加關鍵字static就是內部鏈接,表明該變量為定義該變量的文件私有。
c語言調用外部函數連接不了
你必須用include包括file1和file2否則雖然你用extern告訴編譯器有這兩個函數,能通過編譯,但是實際上編譯器並不知道這兩個文件在哪,所以會出錯
關於c語言中變量有外部鏈接內部鏈接和無 鏈接怎麼理解?
這部分內容是在程序的編譯和link層面談的。
一個大一些的工程往往不是只有一個程序文件,經常由好多C程序文件構成,有的時候裏面個別程序可能還用的其他語言,編碼完成後常常分別編譯,編譯完成再link到一起。某個C程序需要用到其他程序中定義過的變量,一般都加extern前綴,編譯時編譯器會預留訪問鏈接的空位,等到link階段再在整個工程的其他C編譯結果中去對號,把訪問鏈接填上。這就是外部鏈接。如果你程序全寫在一個文件里,那永遠都不會有外部鏈接。
內部鏈接常指一個程序文件中全局變量,可以被程序文件內各個子程序訪問,這在編譯過程中處理,和link階段不發生關係。如果變量前加了static,那麼它永遠不會被外部程序訪問,它不會被編譯程序寫入目標代碼的鏈接區。
無鏈接,就是在一個單體程序里,比如一個子程序,定義一個變量只給這個程序段用,那就是無鏈接。編譯器和link都不需要對這樣的變量做跨程序段的地址鏈接,這樣的變量都是直接分配寄存器或者近堆中的直接地址(每個子程序都有自己的基本存儲空間,被調用時得到分配,返回時被釋放,我習慣叫它近堆,標準叫啥早不記得了)。
變量是這樣,程序代碼段也大體差不多。每次在程序文件中調用一個文件內部的子程序,就產生一個內部鏈接;如果調用外部文件中的子程序,就產生一個外部鏈接。只有沒有任何子程序,所有代碼都寫在一個文件里的程序,才是無鏈接程序。
鏈接是個編譯和link層面的概念,所以不僅限於變量層面討論。
對了,再延伸,可以把一些子程序文件歸類,程序執行某部分任務才訪問,其他時間不訪問時,可以生成DLL。在程序執行那部分功能時,通過操作系統和DLL建立動態鏈接,當然這是外部鏈接,這也是程序設計中常用到的。這可以避免生成一個巨大的EXE,運行時吃掉過多的系統資源,還可以實現這個DLL中包含的子程序在操作系統級和其他程序共用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/193089.html