兩個c源編譯程序
要知道,一個系統生成的程序文件夾里,只可能有一個源程序,打開兩個必然會沖突啊。
你可以打開兩個VS來進行對兩個源程序的編譯。
㈡ C語言文件的編譯與執行的四個階段並分別描述
開發C程序有四個步驟:編輯、編譯、連接和運行。
任何一個體系結構處理器上都可以使用C語言程序,只要該體系結構處理器有相應的C語言編譯器和庫,那麼C源代碼就可以編譯並連接到目標二進制文件上運行。
1、預處理:導入源程序並保存(C文件)。
2、編譯:將源程序轉換為目標文件(Obj文件)。
3、鏈接:將目標文件生成為可執行文件(EXE文件)。
4、運行:執行,獲取運行結果的EXE文件。
(2)兩個c源編譯程序擴展閱讀:
將C語言代碼分為程序的幾個階段:
1、首先,源代碼文件測試。以及相關的頭文件,比如stdio。H、由預處理器CPP預處理為.I文件。預編譯的。文件不包含任何宏定義,因為所有宏都已展開,並且包含的文件已插入。我歸檔。
2、編譯過程是對預處理文件進行詞法分析、語法分析、語義分析和優化,生成相應的匯編代碼文件。這個過程往往是整個程序的核心部分,也是最復雜的部分之一。
3、匯編程序不直接輸出可執行文件,而是輸出目標文件。匯編程序可以調用LD來生成可以運行的可執行程序。也就是說,您需要鏈接大量的文件才能獲得「a.out」,即最終的可執行文件。
4、在鏈接過程中,需要重新調整其他目標文件中定義的函數調用指令,而其他目標文件中定義的變數也存在同樣的問題。
㈢ 求助:在linux下,我有兩個.C源文件,怎麼編譯到一起
編譯沒問題,但不能連接成一個程序,否則就會出現 main() 函數的重復定義錯誤
最簡單的辦法是,寫一個 shell 腳本 c,內容是:
./b
./a
chmod a+x c
㈣ C語言如何將兩個源程序文件連接在一起編譯
你建個項目(project),把兩個文件放在一起就行了。
㈤ 為什麼兩個c源程序都包含stdio.h。 而鏈接時不會出現重定義,stdio里不是定義了許多函數ma
1、如果引用了多次,會導致重復定義函數錯誤,所以多次導入需要做如下處理。
2、採用#ifndef避免重復導入。
格式如下:
#ifndef __SOMEFILE _H_
#define __SOMEFILE _H_
...//一些聲明語句
#endif
#ifdndef的方式依賴於宏名不允許沖突。這不光可以保證同一個文件不會被包含多次,也能保證內容完全相同的兩個文件不會不小心被同時包含。缺點是如果不同頭文件的宏名不小心相同,那麼可能會導致頭文件明明被include了,編譯器卻說找不到聲明的狀況。
3、你說多次導入沒問題,那應該是用了2的方法
㈥ 小弟最近編寫了兩個c語言源程序,但其中種種問題無法解決,特來求助
首先我們來討論下第一個程序。
第一個程序的問題並不大,編譯的時候編譯器提示:
錯誤3errorC3861:「getch」:找不到標識符
我們分析這個錯誤,是編譯器無法識別"getch"這個函數。經過查詢,我們了解到getch()函數的確存在,並且詳細信息如下:
函數名
getch
功 能
在windows平台下從控制台無回顯地取一個字元,在linux下是有回顯的。
返回值
從鍵盤上讀取到的字元
頭文件
#include <conio.h>
注意這里提到的頭文件,就是包含了這個函數定義的文件,你需要在文件開始加入進去進行編譯才可以。所以加入#include <conio.h>後即編譯通過!
程序如下:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
intmain()
{
FILE*out;
charoutfile[20],ch;
longi=0;
printf("! ");
scanf("%s",outfile);
if((out=fopen(outfile,"r"))==NULL)
printf("NO! ");
for(i=0;!feof(out);i++)
ch=fgetc(out);
fclose(out);
getch();
return0;
}
再來看第二個程序。
首次編譯後提示錯誤如下:
錯誤5errorC3861:「fcloce」:找不到標識符
提示如同上一個程序中關於"getch"的提示。我們查詢後發現floce並不存在,但是聯繫上下文可以判斷此處應當是關閉文件指針的操作,對應的函數應當為fclose。因此將其更改為fclose(in)即可編譯通過。
程序如下:
#include<stdio.h>
#include<stdlib.h>
intmain()
{
FILE*in,*out;
charch,infile[20],outfile[20];
longi=0;
printf("in ");
scanf("%s",infile);
printf("out ");
scanf("%s",outfile);
if((in=fopen(infile,"r"))==NULL)
{
printf("NOin! ");exit(0);
}
if((out=fopen(outfile,"w"))==NULL)
{
printf("NOout! ");exit(0);
}
for(i=0;!feof(in);i++)
{
ch=fgetc(in);
fputc(ch,out);
printf("%ld//**** ",i);
}
fclose(in);
fclose(out);
return0;
}
問題都是小問題,但是反映出了一些問題。
1、首先是程序的書寫問題。程序二中你將fclose(in)和fclose(out)放在了一行里書寫,這樣如果某一個語句出現了錯誤,程序提示錯誤出現在第幾行的時候你無法准確判斷究竟是哪一個語句出現了錯誤。所以建議單條語句單行書寫。
2、其次是關於定義變數時的書寫問題。我注意到你在定義文件指針的時候是將FILE*in,out;連在一起書寫的。其實在定義指針類型的變數的時候,*號是跟隨著變數名稱的,所以盡量在FILE和*號之間添加上一個空格,便於查看。
3、最後是關於查看錯誤信息的能力問題。通常編譯錯誤的時候,編譯器都會明確的通知你錯誤是什麼,以及錯誤出現在程序中的第幾行。有時候可能編譯器顯示不全,你可以右鍵後點擊復制,然後將其錯誤信息粘貼出來查看。如下圖所示:
如果實在不知道如何來解決,可以嘗試將錯誤信息黏貼到網路或是其他搜索引擎上面查找,試圖看看有沒有網友遇到過相同或是相似的問題,從而獲得解決辦法。
望有所幫助,並祝願樓主編程能力更進一步!
㈦ 如何將兩個c語言源程序合並在一起編譯成一個hex文件,使之發揮不同的作用。如圖
好像不能吧,每個程序中只能有一個main函數的,也只能轉換成一個hex文件,
兩個的話,只能改程序
㈧ 怎麼連接兩個C程序的源文件啊
c和c++的多文件編程規則是有差別的。下面只描述c的(主要是語法要求不太一樣,體現在編譯層面)。
簡單來說,有兩個層面的問題:
1
編譯問題
2
鏈接問題
1
編譯問題:
就是你的代碼要能夠編譯通過,編譯主要是對語法的檢查。例如:
1
a文件用b文件里的函數問題:在c語言中,a文件用b文件的函數,預設不用做任何說明(預設就是全局函數,注意不能是static函數,當然建議寫上extern的引用說明)。
2
但是如果a文件要用b文件的結構體。那麼必須把結構體放到頭文件里,兩個源文件都去include。
不羅列了,簡單來說,代碼要復合c的語法要求。
2
鏈接問題:
多個源文件可以編譯成編譯單元(編譯做得事),並且把這些編譯單元鏈接到一起形成最終的可執行文件或動態/靜態庫。
註:編譯單元,.o文件。
舉例:有a.c和b.c
以gcc編譯來說:(不考慮其他編譯和鏈接情況)
gcc
-c
a.c
//生成a.o
gcc
-c
b.c
//生成b.o
gcc
-o
hello
a.o
b.o
//
a.c和b.c裡面一個必須有main函數。輸出hello可執行程序。
如果是在集成開發環境,例如vc、devc++、codebloker等。就在軟體相關工程屬性里勾選上或增加源文件就行。(工具屏蔽了編譯鏈接技術細節)
㈨ 建立兩個C++源程序,先打開第一個,編譯運行後,再打開第二個進行編譯運行,會出現什麼問題原因
會出現main already defined in Cpp1,one or more multiply defined symbols found,編譯不會出錯,但是組建就會出現上述情況,有1個或更多的主函數發現,但是只允許一個main函數,要在文件欄關閉工作區,才能打開另外一個。
㈩ visual studio 2008中怎麼樣編譯兩個C語言程序
1、文件--新建--項目--visual
c++--win32--控制台應用程序
2、解決方案--源文件--右擊--添加--新建項--visual
c++--c++文件(.cpp)
寫程序就行了
如果提示有錯誤的話一般情況是缺少系統組建,也就是vs2008安裝文件是損壞的,故要重新下載