c文件再編譯
❶ c多個文件如何編譯
關於整個 C 語言中的主函數 main( ) 如何調用相關的頭文件(*.h)、以及調用其它獨立的模塊(*.c)的方法,關鍵在於對於如何編寫 makefile 文件的真正理解、以及真正掌握編寫規則。
由於我已經有很多年沒有編寫過 C 語言源程序、以及編寫 makefile 文件了,但是可以大概給你提供一個思路就是:
下面的文本文件假設以 my_makefile 為例,編譯環境為 linux 系統,C 語言編譯器為 gcc。
但是在這里注意一點:我的 my_makefile 文件中的注釋語句是否是分號進行注釋,我已經不太記得了,這個需要自己再參考一下。
另外就是:對源文件(*.c)、以及生成可執行文件(my_runfile)在 my_makefile 文件中的前後次序,我也記不清了,僅供參考。
myprog1.o: myprog1.c ; myprog1.o 的生成依賴於 myprog1.c 這個源程序
gcc -c myprog1.c ; 使用 Linux 系統的 C 語言編譯器對 myprog1.c 只編譯、不鏈接
myprog2.o: myprog2.c ; myprog2.o 的生成依賴於 myprog2.c 這個源程序
gcc -c myprog2.c ;使用 Linux 系統的 C 語言編譯器對 myprog2.c 只編譯、不鏈接
my_runfile: myprog1.o myprog2.o ; 可執行文件 my_runfile 的生成依賴於 myprog1.o、myprog2.o 這兩個目標文件
gcc -o my_runfile myprog1.o myprog2.o ; 使用 cc 的 -o 選項生成用戶自定義的可執行文件:my_runfile,如果不指定 -o 選項,cc 編譯器生成的預設可執行文件名為:a.out
運行命令為:
$make -f my_makefile (使用 -f 選項代替預設的 make 文件名 makefile)
❷ 可以詳細的說明一下如何把c文件編譯出來么求你了
在windows系統中可以到網上找一個叫DevC++的軟體,可以編譯出來!
要是在Linux中,編譯C文件,需要你安裝 gcc編譯器,我一般的C文件都是用vim編輯器寫的。
例子:
寫一個C文件保存,如 helloworld.c
然後利用gcc編譯器進行編譯,命令如下:gcc helloworld.c -o helloworld
如果程序正確,這個時候應該出現在當前目錄下出現一個可執行文件helloworld
然後你運行這個文件:命令如下:./helloworld
vim是vi的一個升級,用法可以搜一下,gcc的用法也可以查一下,主要看命令參數,在上面的命令中用了一個「 -o 」,還有其它一些,可以網上查了看看,程序要是調試,推薦gdb調試工具。用法網上多的是!
下面是我回答別人的
在終端命令行中打命令
vim hello.c
這時會出現一個空文檔,點擊a,這時進入輸出模式:寫上代碼:
#include<stdio.h>
int main(int argc,char **argv)
{
printf("hello world.\n");
return 0;
}
點ESC鍵,進入命令模式,點x鍵,回車。
在命令行中繼續寫
gcc hello.c -o hello
用ls命令查看一下是不是多了一個hello文件
接著在命令行中寫:./hello
這個時候看結果!!!
❸ 如何編譯並運行c語言程序
1、創建一個文件名為main.c,然後用任意一個款你熟悉的文本編輯軟體,比如說記事本,在裡面輸入下面的代碼,記住,要用文本文件編輯軟體,不能用word的。
(3)c文件再編譯擴展閱讀:
c語言小游戲實現原理
1、二維數組實現棋盤
二維數組,用兩個for 循環,隨便輸出一個固定符號做棋盤,如 *
2、判定玩家
設計一個計步變數step, 每走一步 step++, 則玩家=step%2+1;
3、判定輸贏(重點)
設計方向數組 dircX[4] ,dircY[4],因為如果要判斷是否練成五子,只有1豎著2橫著3斜下4斜上
豎著的話就是 x-1,y不變
橫著的話就是x不變,y+1; 斜下: x+1,y+1; 斜上 x-1;y+1
這樣你就可以賦值dircX={-1,0,1,-1} dercY={0,1,1,1}
每當玩家落下一子,就全局判斷每個子的四個方向有沒有第二子,如果有,循環判斷有沒有第三子(利用 x+=dircX[1]),直到五子完成,結束。
❹ c語言中多個文件的編譯問題
第一個問題
請問,我是不是該這樣做:
在main.c中#include
在fun.c中同樣#include
(好像是必需的,請詳細解釋)
這是必需的。因為編譯器只是把包含文件的代碼復制過來,既然你二個文件中都用到頭文件的內容,那當然要包含頭文件,否則就會出錯。
我的觀點,如果這兩步都是必需的
那麼當有很多個比如10個.c程序每個里頭都要#include
那麼文件是不是會特別大,當有100個.c程序都要包含一下的話,那麼不是非常重復么?)
那當然是會重復的。不過這個對程序的運行效率沒任何影響,只是在編譯過程中對文件的分析時間會稍長些,這也是沒有辦法的事,全看代碼編寫者如何組織結構了。
第二個問題:
會的。解決的方法就是在可能被多次包含的頭文件中開頭加上#pragma
once,那樣就可以保證此頭文件代碼只被執行一次,而不會造成頭文件中函數多次重復定義至於引起這種情況的情況。當然你也可以自己用#ifdef等預編譯處理來解決。你問的問題不就是這種情況么?main.c和fun.c中都包含頭文件tou.h
第三個問題:
當我在main.c中這樣
#define
unchar
unsigned
char
那麼當我在fun.c中還需要重新創建替換宏unchar嗎
可以不在創建而直接使用嗎?
答案是需重新創建,不能直接使用。但你可以把一些在多個文件中使用的宏、全局變數等統一定義到一個頭文件中,那這樣就可以避免多次定義了。
❺ windows如何編譯c文件
首先必須要在 Windows 操作系統上安裝一個 C/C++ 編譯器(例如:Microsoft Visual Studio C++),然後在這個集成環境中編寫 C 語言源程序(擴展名為 *.c),編寫完源程序之後,使用編譯器自帶的編譯、鏈接選項對源程序進行編譯、鏈接,若此時源程序沒有任何問題的話,即可以生成一個擴展名為 *.exe 的可執行文件。
❻ C語言文件的編譯與執行的四個階段並分別描述
開發C程序有四個步驟:編輯、編譯、連接和運行。
任何一個體系結構處理器上都可以使用C語言程序,只要該體系結構處理器有相應的C語言編譯器和庫,那麼C源代碼就可以編譯並連接到目標二進制文件上運行。
1、預處理:導入源程序並保存(C文件)。
2、編譯:將源程序轉換為目標文件(Obj文件)。
3、鏈接:將目標文件生成為可執行文件(EXE文件)。
4、運行:執行,獲取運行結果的EXE文件。
(6)c文件再編譯擴展閱讀:
將C語言代碼分為程序的幾個階段:
1、首先,源代碼文件測試。以及相關的頭文件,比如stdio。H、由預處理器CPP預處理為.I文件。預編譯的。文件不包含任何宏定義,因為所有宏都已展開,並且包含的文件已插入。我歸檔。
2、編譯過程是對預處理文件進行詞法分析、語法分析、語義分析和優化,生成相應的匯編代碼文件。這個過程往往是整個程序的核心部分,也是最復雜的部分之一。
3、匯編程序不直接輸出可執行文件,而是輸出目標文件。匯編程序可以調用LD來生成可以運行的可執行程序。也就是說,您需要鏈接大量的文件才能獲得「a.out」,即最終的可執行文件。
4、在鏈接過程中,需要重新調整其他目標文件中定義的函數調用指令,而其他目標文件中定義的變數也存在同樣的問題。
❼ C語言編寫好代碼後,怎麼編譯,最後生成可執行文件
材料/工具:vc6.0
1、打開c語言編輯工具,在工具中寫入程序的源代碼。
❽ 怎麼編譯多個c語言文件
1、如果,在一個c主程序中,以include形式包含了其他所有的引用文件,在編譯過程中,編譯器首先會將這些文件合並到一個臨時文件中,然後再對這個臨時文件進行編譯。
2、如果,是作為一個工程,編譯器會分別編譯各個獨立的文件(如果文件中有include按照上一步進行),然後再將編譯好的初步結果用鏈接程序連到一起。
簡單的說,每一個.c或者.cc都是一個編譯單元,每一個編譯單元編輯的結果是一個.o或者obj之類的中間文件,至於是否是多文件,不需要關心,但是要保證不同的編譯單元之間不要有重復的符號,這就是要避免重復包含。
每一個編譯單元生成的目標文件.o或者obj都會引用一些不在本目標文件中的符號,這些符號定義在別的.o或者.obj文件中, 鏈接器把他們聯系在一起,所有的符號也就都有定義了,編譯鏈接簡單說來就是這樣。
❾ 如何編譯C文件
編譯C文件用GCC。
編譯C文件常用方法:
單個文件:
g++
file.cpp
這是最簡單形式,預設輸出為a.out,可以用-o命令指定輸出文件,比如g++
file.cpp
f.out
多個文件:
g++
-c
1.cpp
-o
1.o
g++
-c
2.cpp
-o
2.o
g++
1.o
2.o
-o
prog.out
鏈接成可執行文件:
一般用g++
-o
file
file.cpp
多個文件是g++
-o
file
file1.cpp
file2.cpp
...
編譯C++不是用GCC而是G++.
如果用GCC能編譯但不能鏈接.
多個文件:
1.編譯多個文件,但不連接:
g++
file1.cpp
file2.cpp
會生成兩個文件:file1.o,
file2.o
2.連接:
g++
-o
outFileName
file1.o
file2.o
會生成一個可執行文件:outFileName。
如果想,一步就完成編譯和連接,那麼:
g++
-o
outFileName
file1.cpp
file2.cpp
-o選項控制是否連接。
❿ windows怎麼編譯.c文件
(1)先用記事本編寫如下所示的代碼,並另存為hello.cpp,假設其保存路徑為
C:\Users\Administrator\Desktop。
#include<iostream>
using namespace std;
int main()
{
cout<<"hello world!"<<endl;
return 0;
}
(2)用記事本寫一段簡單的批處理文件,內容如下所示,在保存文件時選擇另存為,文件名
假設為batch.bat,bat是批處理文件的後綴,保存類型選擇:所有文件(這個尤其需要注意),
假設其保存路徑也是:C:\Users\Administrator\Desktop。
set path=D:\Softwares\en_Visual_Studio2010_Professional_x86_x16-81637\VC\bin
set include=D:\Softwares\en_Visual_Studio2010_Professional_x86_x16-81637\VC\include
set lib=D:\Softwares\en_Visual_Studio2010_Professional_x86_x16-81637\VC\lib
上面批處理文件的第一句話表示設置環境變數,這個也可以通過:計算機/屬性/高級系統設置/
環境變數/用戶變數,把D:\Softwares\en_Visual_Studio2010_Professional_x86_x16-81637\VC\bin
放到path的值里去,記得與之前已有值之間用";"隔開。這個path文件夾是我們裝載VS2010時自
帶的,在設置路徑時要根據自己的安裝路徑進行修改,裡麵包含微軟在Windows下給我們提供的
C/C++編譯器cl.exe程序(編譯器自身也是一個軟體程序,只是它的作用是用來編譯其它的程序),
當然還有link.exe鏈接程序,調用cl時,系統會自動調用link程序(後面將看到我們只用了cl命令就
可以進行C/C++程序的編譯、鏈接)。後面兩句話分別表示包含C++中自帶的頭文件庫和靜態鏈接
庫,靜態理解庫包含了頭文件中函數對應的實現部分,為了不讓人們看到其中的源代碼,它以二進
制文件形式編碼,若要查看其內容需要進行反匯編。
(3)通過cmd命令進入DOS操作界面,輸入cd C:\Users\Administrator\Desktop進入cpp文件和bat
批處理文件所在的位置,然後鍵入batch.bat進行批處理,這些操作在VS2010集成開發環境中都為我
設置好了,所以我們在裡面寫C/C++程序時並沒有這樣設置路徑的繁瑣操作,但是通過自己手動的
路徑設置,我們會對程序的編譯、鏈接、執行有更加深入的認識。
(4)鍵入cl hello.cpp,我們會看到計算機報出了「無法啟動此程序,因為計算機中丟失mspdb100.dll。
嘗試重新安裝該程序以解決此問題」的系統儲物,dll文件是動態鏈接庫文件,其是在cl.exe程序運行時
才被載入進來的文件,這個靜態鏈接庫lib文件不同。這說明在D:\Softwares\en_Visual_Studio2010_
Professional_x86_x16-81637\VC\bin路徑里沒有找到mspdb100.dll,原來此文件在文件夾D:\Softwares\
en_Visual_Studio2010_Professional_x86_x16-81637\VC\Common7\IDE里,我們可以將此文件拷到bin
文件夾里,或將D:\Softwares\en_Visual_Studio2010_Professional_x86_x16-81637\Common7\IDE加到
批處理的path環境變數里,或者將其加到cpp文件所在的文件夾里,這只會引起在搜索順序上的不同。
(5)再次鍵入cl hello.cpp,我們看到在C:\Users\Administrator\Desktop文件夾里得到了hello.obj文件,
這是編譯後的輸出文件,但是沒有得到可執行exe文件,DOS界面里出現這樣的錯誤「LINK:fatal error LNK
1104:cannot open file 'kernel32.lib' 「這樣的鏈接錯誤,kernel32.lib是Windows系統文件,通過Windows
自帶的搜索工具,我們看到此文件在文件夾C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib里,我們
可以將其加到cpp文件所在的文件夾或bin文件里。再次鍵入cl hello.cpp,我們發現這次程序被成功編譯鏈接
了,cpp文件所在的文件夾里多了兩個文件:hello.obj和hello.exe。
(6)在DOS界面鍵入hello.exe,程序被執行,輸出了我們預想的hello world!,至此,在Windows下模擬
linux命令行操作,編譯C/C++文件全部完成了。