❶ c語言中的連接是什麼意思
c語言中的連接指de是將obj文件生成為exe文件。
##可以作為連接字元串的連接符,##為宏擴展提供了一種連接實際變元的。如果替換文本中的參數用##相連,那麼參數就被實際變元替換,##與前後的空白符被刪除,並對替換後的結果重新掃描。
例如,下面定義的宏paste用於連接兩個變元:
#definepaste(front,back)front##back
從而宏調用paste(name,1)的結果是建立單詞name1。
(1)c語言編譯後的鏈接擴展閱讀
C語言連接符的使用:
#include<stdio.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 ",#x,x);//#表示將參數轉變為字元串
intmain()
{
intx;
floaty;
x=Operations(sum)(10,20);
printf("x=%d ",x);
x=operation_sum(100,20);
printf("x=%d ",x);
x=Operations(sub)(10,20);//operation_sub(10,20)也可以
printf("x=%d ",x);
x=Operations(mul)(10,20);//operation_mul(10,20)也可以
printf("x=%d ",x);
y=Operations(div)(11,20);//operation_div(11,20)也可以
printf("y=%lf ",y);
Print(100);
return0;
}
❷ C語言程序編譯成功了,為什麼連接還出錯
1 編譯階段,執行的是對單個文件的轉換,從源代碼轉換成二進制文件。
2 鏈接階段,將每個源文件轉成的二進制文件,及相關的系統庫文件共同打包生成可執行文件。
3 從定義上可以看出,鏈接階段,出現錯誤有兩種可能:
1) 函數中引用了不存在的函數。
2) 編譯環境有問題,導致ld出錯。
❸ C語言源程序文件經過編譯連接之後生成一個後綴為_____的文件。
如果只生成一個文件,那麼這個題目答案是B。編譯(compile)後生成目標文件,後綴:.obj。也就是機器碼。
然後鏈接器(Linker) 連接生成可執行文件,後綴:.exe。最後運行命令(go),直接運行.exe文件。
(3)c語言編譯後的鏈接擴展閱讀:
簡單講,編譯器就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。
一個現代編譯器的主要工作流程:源代碼(source code) →預處理器(preprocessor) →編譯器(compiler) →目標代碼(object code) →鏈接器(Linker) → 可執行程序(executables)
高級計算機語言便於人編寫,閱讀交流,維護。機器語言是計算機能直接解讀、運行的。
編譯器將匯編或高級計算機語言源程序(Source program)作為輸入,翻譯成目標語言(Target language)機器代碼的等價程序。
源代碼一般為高級語言 (High-level language), 如Pascal、C、C++、Java、漢語編程等或匯編語言。
而目標則是機器語言的目標代碼(Object code),有時也稱作機器代碼(Machine code)。
對於C#、VB等高級語言而言,此時編譯器完成的功能是把源碼(SourceCode)編譯成通用中間語言(MSIL/CIL)的位元組碼(ByteCode)。
最後運行的時候通過通用語言運行庫的轉換,編程最終可以被CPU直接計算的機器碼(NativeCode)。
❹ C語言編譯好後怎麼鏈接
在絕大多數C/C++的集成開發環境(如VC6、VS、TC、QT)中,編譯和鏈接都可以通過一個按鍵解決。以VC6為例,你可以通過build按鈕(快捷鍵F7)一步完成編譯和鏈接,當然你也可以先編譯(compile 快捷鍵Ctrl+F7),後點擊build按鈕,效果是一樣的。
編譯和鏈接,其實就是編譯型編程語言(解釋性編程沒有這個步驟)的生成可執行文件的兩個步驟。
編譯,是為了將源代碼生成目標文件(也叫中間文件);鏈接,是將目標文件生成最終的可執行文件。
通常,在命令行編譯模式下,你都需要執行兩個命令來分別完成編譯和鏈接,但在集成開發環境中,這不是必要的,完全可以一鍵完成。
之所以分兩步,主要的設計目的,就是用不同的連接器可以生成在不同平台和不同環境下使用的可執行文件。但這個在同一個圖形化的IDE界面中並沒有什麼意義。
❺ C語言編譯怎樣連接lib文件,請講解連接的原理,
廣義的代碼編譯過程,實際上應該細分為:預處理,編譯,匯編,鏈接。
預處理過程,負責頭文件展開,宏替換,條件編譯的選擇,刪除注釋等工作。gcc –E表示進行預處理。
編譯過程,負載將預處理生成的文件,經過詞法分析,語法分析,語義分析及優化後生成匯編文件。gcc –S表示進行編譯。
匯編,是將匯編代碼轉換為機器可執行指令的過程。通過使用gcc –C或者as命令完成。
鏈接,負載根據目標文件及所需的庫文件產生最終的可執行文件。鏈接主要解決了模塊間的相互引用的問題,分為地址和空間分配,符號解析和重定位幾個步驟。實
際上在編譯階段生成目標文件時,會暫時擱置那些外部引用,而這些外部引用就是在鏈接時進行確定的。鏈接器在鏈接時,會根據符號名稱去相應模塊中尋找對應符
號。待符號確定之後,鏈接器會重寫之前那些未確定的符號的地址,這個過程就是重定位。
❻ C語言編譯好後怎麼鏈接
可以這樣做:
1、新建c/c
源文件(在文件這里選擇新建)
2、命名c/c
源文件名,並為它指定保存路徑(選擇文件中的c/c
source
file)(並在右邊輸入文件名,選擇保存位置,點擊確定)
3、開始錄入程序(在空白的工作窗口錄入程序)
4、編譯(點擊第一個紅框,所有的提示均按確定),運行(紅色感嘆號)
❼ C語言編輯編譯連接的作用是什麼
C語言編輯的作用是檢查語法,製作C語言的源文件和頭文件,生成匯編代碼。
C語言編輯的作用是將匯編代碼轉換機器碼。在這一步中,會對文件內部的語法語義做處理,如果編譯出錯,無法進行後續動作。
C語言鏈接的作用是將機器碼鏈接到一起生成可執行程序。這一步會對文件之間的關聯做檢查,如果出錯,將不會生成可執行程序,也就無法執行。
(7)c語言編譯後的鏈接擴展閱讀:
C語言鏈接時,將源文件中用到的庫函數與匯編生成的目標文件.o合並生成可執行文件。該可執行文件會變大很多,一般是調用自己電腦上的靜態庫。
靜態庫和應用程序編譯在一起,在任何情況下都能運行,而動態庫是動態鏈接,文件生效時才會調用。很多代碼編譯通過,鏈接失敗就極有可能在靜態庫和動態庫這出現了紕漏,要視情況解決。缺少相關所需文件,就會鏈接報錯。這個時候就要檢查下本地的鏈接庫是不是缺損。
❽ c語言裡面的編譯和鏈接是怎麼回事啊
C/C++語言的完整編譯過程是
一、預編譯
處理#define #if #include這類#開頭的語句,這些稱為預編譯指令。這個過程中會把.h文件和.c/.cpp文件組合成最終交給compile過程的原文件。這個原文件是不包含任何#開頭的語句的。所有#define定義的宏也會被替換。
二、編譯
把上面那個原文件編譯成.o或者VC里是.obj文件。這個文件保存了機器碼化的函數、函數的描述、全局變數的描述、乃至段的描述等等。
三、連接
把可執行程序需要的所有的編譯過程產生的.o或者.obj文件組合到一起。(這里也包括.lib文件,.lib文件件本質上就是打包的.obj文件集合)。另外連接過程還會組合一些其他數據,比如資源、可執行文件頭等等。
❾ c語言裡面的編譯和鏈接是怎麼回事
C/C++語言的完整編譯過程是
一、預編譯
處理#define #if #include這類#開頭的語句,這些稱為預編譯指令。這個過程中會把.h文件和.c/.cpp文件組合成最終交給compile過程的原文件。這個原文件是不包含任何#開頭的語句的。所有#define定義的宏也會被替換。
二、編譯
把上面那個原文件編譯成.o或者VC里是.obj文件。這個文件保存了機器碼化的函數、函數的描述、全局變數的描述、乃至段的描述等等。
三、連接
把可執行程序需要的所有的編譯過程產生的.o或者.obj文件組合到一起。(這里也包括.lib文件,.lib文件件本質上就是打包的.obj文件集合)。另外連接過程還會組合一些其他數據,比如資源、可執行文件頭等等。
❿ C語言源程序文件經過編譯連接之後生成一個後綴為_____的文件。
如果只生成一個文件,那麼這個題目答案是B。編譯(compile)後生成目標文件,後綴:.obj。也就是機器碼。
然後鏈接器(Linker) 連接生成可執行文件,後綴:.exe。最後運行命令(go),直接運行.exe文件。
(10)c語言編譯後的鏈接擴展閱讀:
簡單講,編譯器就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。
一個現代編譯器的主要工作流程:源代碼(source code) →預處理器(preprocessor) →編譯器(compiler) →目標代碼(object code) →鏈接器(Linker) → 可執行程序(executables)
高級計算機語言便於人編寫,閱讀交流,維護。機器語言是計算機能直接解讀、運行的。
編譯器將匯編或高級計算機語言源程序(Source program)作為輸入,翻譯成目標語言(Target language)機器代碼的等價程序。
源代碼一般為高級語言 (High-level language), 如Pascal、C、C++、Java、漢語編程等或匯編語言。
而目標則是機器語言的目標代碼(Object code),有時也稱作機器代碼(Machine code)。
對於C#、VB等高級語言而言,此時編譯器完成的功能是把源碼(SourceCode)編譯成通用中間語言(MSIL/CIL)的位元組碼(ByteCode)。
最後運行的時候通過通用語言運行庫的轉換,編程最終可以被CPU直接計算的機器碼(NativeCode)。