『壹』 c語言源程序文件、目標文件和可執行文件的擴展名是什麼
C語言源程序文件擴展名: .c
目標文件擴展名: .obj
可執行文件擴展名: .exe
源程序:程序可以用高級語言或匯編語言編寫,用高級語言或匯編語言編寫的程序稱為源程序。C語言源程序的擴展名為「.c」。源程序不能直接在計算機上執行,需要用「編譯程序」將源程序編譯為二進制形式的代碼。
目標程序:源程序經過「編譯程序」編譯所得到的二進制代碼稱為目標程序。目標程序
的擴展名為「.obj」。
目標代碼盡管已經是機器指令,但是還不能運行,因為目標程序還沒有解決函數調用問題,需要將各個目標程序與庫函數連接,才能形成完整的可執行程序。
可執行程序:目標程序與庫函數連接,形成的完整的可在操作系統下獨立執行的程序
稱為可執行程序。可執行程序的擴展名為「.exe「。
(1)c語言鏈接器什麼作用擴展閱讀:
C語言創建程序的步驟:
編輯:就是創建和修改C程序的源代碼-我們編寫的程序稱為源代碼。
編譯:就是將源代碼轉換為機器語言。編譯器的輸出結果成為目標代碼,存放它們的文件稱為目標文件。擴展名為.o或者.obj。(該部分編譯是指匯編器編譯匯編語言或者編譯器編譯高級語言)
鏈接:鏈接器將源代碼由編譯器產生的各種模塊組合起來,再從C語言提供的程序庫中添加必要的代碼模塊,將它們組成一個可執行的文件。在windows下擴展名為.exe,Unix下無擴展名。
執行:運行程序。
IT專家網——C語言編程程序編譯全過程剖析
『貳』 c語言怎麼用
教你學習的方法吧
新手如何學習C語言
第一:一些概念。
C語言是一門程序設計語言,有一些標准,比較重要的是ANSI C(好像是C89)和C99。
數據結構包括邏輯結構和物理結構。邏輯結構是數據元素集合和定義在集合上的關系。物理結構是邏輯結構在計算機中的實現。
LCC、VC、TC、GCC都是C語言編譯器,一般包括集成開發環境,編譯器和鏈接器及輔助工具
我們書寫的是C源程序,源程序通過編譯器編譯為中間文件,中間文件經鏈接器鏈接生成可執行文件。不同操作系統可執行文件不同。中間文件也有幾個標准,微軟使用的和Linux下通用的有差異。
第二:學習什麼。
個人認為程序設計學習的重點放在數據結構的學習上,但是這種學習要有一個平台,比如C語言。
學習C語言首先要掌握基本語法,常量、變數、類型、及順序結構、分支結構和循環結構的意義及用法。進一步學習構造類型如指針、結構、函數的意義和用法。
C語言提供一些標准函數以減輕程序設計工作量,這些函數我們自己也可以實現。即使不依靠函數庫,只有編譯器,理論上就足夠了。事實上,提供的標准函數效率都很高,使用很頻繁,沒有自己實現的必要,所以掌握常用函數是非常必要的,但是要注意函數的適用范圍。
繼續學習因人而異,應該可以獨立選擇了。
第三:如何學習。
強調多實踐,C語言的學習要經常上機,多寫程序才能逐步提高。
『叄』 用C語言編寫一個程序: 從鍵盤輸入 10 個整數,求出其中的最大值。
程序:
#include<stdio.h>
int main()
{
int arr[10] = {0};
int i = 0;
int max = 0;
int min = 0;
printf("請輸入10個整數:");
for (i = 0; i < sizeof(arr)/ sizeof(arr[0]); i++)
{
scanf("%d",&arr[i]);
}
max = arr[0];
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if (max < arr[i])
{
max = arr[i];
}
}
min = arr[0];
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if (min > arr[i])
{
min = arr[i];
}
}
printf("max=%d
", max);
printf("min=%d
", min);
return 0;
}
結果:
請輸入10個整數:1 2 3 56 23 6 767 32 11 567
max=767
min=1
請按任意鍵繼續. . .
(3)c語言鏈接器什麼作用擴展閱讀:
編寫過程分為三部分:源代碼文件 ------> 目標代碼文件------>可執行文件。
用到兩個組件:編譯器、鏈接器。編譯器的作用是將源代碼轉換為中間代碼,產生中間文件。鏈接器將此中間代碼與其他代碼相結合來生成可執行文件。
中間文件的形式有多種,一般就是將源代碼文件轉換為機器語言代碼,將其結果放置在一個目標代碼文件中。雖然目標代碼文件包含機器代碼文件,但是該文件還不能運行。目標文件包含源代碼的轉換結果,但它還不是一個完整的程序,也就是不是一個完整的可執行文件,它還需要與一些基本元素。
目標代碼文件中所缺少的第一個元素是一種叫做啟動代碼的東西,這個代碼相當於程序跟操作系統之間的介面。所缺少的第二個元素是庫常式的代碼,幾乎所有c程序都利用標准c庫中所包含的常式,例如printf。
而鏈接器的作用就是將這三部分結合在一起,並將它們存放在單個文件,即可執行文件中,這樣,一個完整的可執行文件就產生了。
『肆』 C語言裡面"具有外部鏈接的靜態變數"這里的"鏈接"是什麼意思
首先從靜態變數說起. C語言裡面靜態變數有三種: 分別是外部鏈接性,內部鏈接性和無鏈接性.
聲明外部鏈接的變數的方法是在代碼塊外面聲明它. 此變數是全局變數,多文件中亦可用.
聲明內部鏈接的變數的方法是在代碼塊外面聲明它並加上static限定符. 此變數是全局變數,但僅在本文件中可用.
聲明無鏈接的變數的方法是在代碼塊裡面聲明它並加上static限定符. 此變數是局部變數,但僅在本代碼塊中可用.
例:
#include<...........>
int global=1; //聲明外部鏈接的變數
static int global2 //聲明內部鏈接的變數
int func()
{
int global=5; //聲明的內部變數和全局變數重名,調用時將會隱藏全局的global;
cout<<global; //是內部定義的global的值而不是外面的值.
//如何引用外面的變數呢???
cout<<::global; //可用作用域解析符(::)來說明你要輸出的外面的全局變數.
static int global3; //聲明無鏈接的變數
}
int main()
{
extern int alobal; //在本文件中此句可選.此句的意思為你需要引用外部的變數global;
global=8; //直接引用全局變數.
}
望採納!!!!
『伍』 c++ 編譯器 鏈接器 如何運行 原理是什麼
#include "fun.cpp"
這一句使得在編譯的時候fun.cpp全文將被復制到主程序文件中,在主文件裡面當然能使用了,這不是文件作用域的問題。
至於前一個問題,你沒給出程序的全文,我也看不出來。
另外:對樓主的回復:
你對fun.cpp也使用include的話,則fun.cpp中的內容肯定也是要復制過去的,只要你用include。(include這個保留字的含義就是告訴編譯器除了讀包含include這個語句的文件之外還要讀取include語句包含的文件).一般來說,我們在include後麵包含的都是xxxx.h這樣的頭文件,這是因為在頭文件裡麵包含的都是聲明而不是定義,在一個工程中聲明可以重復多次但是定義(不管它在哪個文件裡面定義)只能一次。像樓主這樣包含fun.cpp的話肯定會導致重復定義的(fun.h和fun.cpp編譯之後形成的fun.obj裡面有函數的實現,main.cpp由於把fun.cpp裡面的內容include進來所以裡面也有函數的實現).至於加了static後為什麼對這是因為static保留字限制了其後所定義的函數或變數只能在本文件中使用.
建議樓主把主程序文件中的#include"fun.cpp"改成#include"fun.h"再試試,另外,找本書看看include和static(主要是靜態全局變數而不是靜態局部變數)相關的內容。
對樓主的再次答復:.h和.cpp中包含的東西是不一樣的。一般來說,.h中放置聲明語句(主要是供編譯器進行類型及函數原型檢查),而.cpp中放置數據的定義以及函數的實現等。而#include語句只包含.h文件。這一點我不知道是不是c語言的規定,但是一般來說編程都是這樣做的。
如果不怕困難,建議你去看一本書,linker and loader 中文版+英文版,網址是:http://download.csdn.net/source/331053
『陸』 c語言中,頭文件是什麼意思有什麼用
頭文件:在C語言家族程序中,頭文件被大量使用。一般而言,每個C++/C程序通常由頭文件和定義文件組成。頭文件作為一種包含功能函數、數據介面聲明的載體文件,主要用於保存程序的聲明,而定義文件用於保存程序的實現。
頭文件的主要作用在於多個代碼文件全局變數(函數)的重用、防止定義的沖突,對各個被調用函數給出一個描述,其本身不需要包含程序的邏輯實現代碼,它只起描述性作用,用戶程序只需要按照頭文件中的介面聲明來調用相關函數或變數,鏈接器會從庫中尋找相應的實際定義代碼。
(6)c語言鏈接器什麼作用擴展閱讀:
對於具有外部存儲類型的標識符,可以在其他任何一個源程序文件中經聲明後引用,此用戶完全可以將一些具有外部存儲類型的標識符的聲明放在一個頭文件中。具體地說,頭文件中可以包括:用戶構造的數據類型(如枚舉類型),外部變數,外部函數、常量和內聯函數等具有一定通用性或常用的量。而一般性的變數和函數定義不宜放在頭文件中。
『柒』 C語言里的static和extern的作用是什麼
假如有三個文件:a.h, a.c, main.c
在文件a.c中定義一個全局變數和函數:
int i = 213;
void print(void) { printf("print in a.c"); }
在文件a.h中聲明這個全局變數和函數:
extern int i;// 加extern聲明而不定義,指明這個變數在某處已定義,此處只是做一個說明
extern void printf(void); // 函數原型即是聲明,所以此處可以不用加extern明確這是聲明
在文件main.c中:
#include 「a.h」
int main()
{
printf("%d\n", i); // 直接使用i
print(); // 直接調用print()
}
---
如果將文件a.c中相關定義改為
static int i = 213;
static void print(void) { printf("print in a.c"); }
文件a.h與main.c中內容不變
此時編譯出錯,報告找不到print()函數,找不到i,這是因為static限制print()和i只能在a.c中使用。
===
如果用static修飾局部變數,則該局部變數將擁有全局生命周期,即在程序執行期間都存在,且其值為上一次使用後的值。
int print(void)
{
static int i = 0;
printf("%d",i++);
}
不加static,每次調用print(),輸出結果都是0
加上static,每次調用printf(), 輸出結果都不同,即:0,1,2,3……