c編譯單元
① c語言源程序的基本單位是什麼
函數吧
② 怎麼編譯多個c語言文件
1、如果,在一個c主程序中,以include形式包含了其他所有的引用文件,在編譯過程中,編譯器首先會將這些文件合並到一個臨時文件中,然後再對這個臨時文件進行編譯。
2、如果,是作為一個工程,編譯器會分別編譯各個獨立的文件(如果文件中有include按照上一步進行),然後再將編譯好的初步結果用鏈接程序連到一起。
簡單的說,每一個.c或者.cc都是一個編譯單元,每一個編譯單元編輯的結果是一個.o或者obj之類的中間文件,至於是否是多文件,不需要關心,但是要保證不同的編譯單元之間不要有重復的符號,這就是要避免重復包含。
每一個編譯單元生成的目標文件.o或者obj都會引用一些不在本目標文件中的符號,這些符號定義在別的.o或者.obj文件中, 鏈接器把他們聯系在一起,所有的符號也就都有定義了,編譯鏈接簡單說來就是這樣。
③ c語言編譯錯誤
main()
{int a,b;
float c;
scanf("%d%c%d",&a,&c,&b);
switch(c) /*c為浮點型,作為測試表達式的話,和下面矛盾。*/
{case '+':{c=a+b;printf("%d\n",c)};break; /*此處c是測試表達式,再將a+b賦給它,會引c單元空間不足(0<c<128),可以將結果賦給a或b,還可以重新定義一個變數,下面同理。這行及下面三行的{}可以省去*/
case '-':{c=a-b;printf("%d\n",c)};break;
case '*':{c=a*b;printf("%d\n",c)};break;
case '/':{c=a/b;printf("%d\n",c)};break;
default: printf("error");} /*此處}不多餘。*/
}
可以改成這樣(僅作參考):
main()
{float a,b,result;
char c;
scanf("%d%c%d",&a,&c,&b);
switch(c)
{case '+':result=a+b;printf("%f\n",result);break;
case '-':result=a-b;printf("%f\n",result);break;
case '*':result=a*b;printf("%f\n",result);break;
case '/':result=a/b;printf("%f\n",result);break;
default: printf("error");}
}
④ 若定義 int x [10];則 Turbo C編譯系統為該數組分配多少個位元組存儲單元
在C語言里,int c[10]只有10個單元,即c[0]~c[9],這一點是與VB不一樣的。
所以,是2*10=20個位元組的存儲單元。
⑤ c語言中編譯後得到的目標文件為什麼不能直接運行,必須連接後才能運行
一編譯單元(一個c文件)就會得到一個目標文件,而最終程序是一個EXE。所以需要鏈接。
同時鏈接需要按照操作系統的可執行文件格式要求組織。
⑥ 在C/C++中,什麼叫編譯單元
可以這樣的理解:
編譯單元
當一個c或cpp文件在編譯時,預處理器首先遞歸包含頭文件,
形成一個含有所有 必要信息的單個源文件,這個源文件就是一個編譯單元。
這個編譯單元會被編譯成為一個與cpp 文件名同名的目標文件 。
連接程序把不同編譯單元中產生的符號聯系起來,構成一個可執行程序。
⑦ C語言程序編譯成功了,為什麼連接還出錯
1 編譯階段,執行的是對單個文件的轉換,從源代碼轉換成二進制文件。
2 鏈接階段,將每個源文件轉成的二進制文件,及相關的系統庫文件共同打包生成可執行文件。
3 從定義上可以看出,鏈接階段,出現錯誤有兩種可能:
1) 函數中引用了不存在的函數。
2) 編譯環境有問題,導致ld出錯。
⑧ c語言是如何編譯成二進制
計算機專業有門課程叫做《編譯原理》,詳細講述了怎麼把高級語言翻譯成匯編語言活著機器能看懂的二進制代碼。
簡單的說,C語言是通過編譯器翻譯成二進制代碼的(就像英譯漢的軟體把英文翻譯成漢語一樣。把高級語言翻譯成機器語言過程很復雜,學了編譯原理就懂了)。還有編譯器可以用各種語言編寫,C語言可以被用C語言寫的編譯器來編譯。
⑨ 在C/C++中,什麼叫編譯單元
可以這樣的理解:
編譯單元
當一個c或cpp文件在編譯時,預處理器首先遞歸包含頭文件,
形成一個含有所有
必要信息的單個源文件,這個源文件就是一個編譯單元。
這個編譯單元會被編譯成為一個與cpp
文件名同名的目標文件
。
連接程序把不同編譯單元中產生的符號聯系起來,構成一個可執行程序。
⑩ 怎麼用VC++2008編譯C語言程序
你用過Visual
Studio中文版么?要是沒用過就試試吧!全中文的界面,不至於讓你連創建工程都要問問題……
有什麼問題直接找我!我是.net程序員