本文目錄一覽:
怎樣用kdevelop創建C語言工程?
1. KDevelop只是一個IDE,要想編譯C語言程序,要安裝make和GCC,以及頭文件,那就從這裡開始:
sudo apt-get build-dep gcc
sudo apt-get install build-essential
2.安裝KDevelop
sudo apt-get install kdevelop3
3.安裝好後,可以在應用程序-編程 中看到 KDevelop了。下面這個使用KDevelop開發程序是轉的,偷下懶:-)
基本步驟
一般而言,用KDevelop編程大體要經歷如下幾個步驟。編程是比較複雜的,很難一次成功,這些步驟
可能要反覆進行多次。
在Ubuntu軟件中心裡安裝了KDevelop後,從模版新建了個Terminal的C++工程,在Build Selection後,點擊“可執行文件”卻跑不起來,還需要做如下的配置。
選擇“運行”-》“配置啟動器”
第一步,新建工程
可以通過菜單操作啟動相應的嚮導程序,藉助它完成工程的初建工作。
【Project】→【New Project】
在新建工程過程中,主要需要指定工程文件保存位置、工程名稱、工程類型,並且可以填寫編程作者
的信息。根據所選工程類型(比如,是文本界面的程序還是圖形界面的程序,是C程序還是C++程序),嚮導程序會自動生成一批模板文件。
第二步,編輯程序文件
嚮導程序一般會創建一些程序文件,應該對這些文件進行編輯以滿足特定的編程需要。
還可以執行菜單操作來增加新的文件。
【File】→【New】
上述操作後,會出現一個對話框,用於指定文件名和文件類型。根據文件類型的不同,會自動設定合
適的擴展名。注意,“Add to project”複選框應該勾選上以確保新文件被加入到當前的工程中。
第三步,生成源碼結構
在編輯好程序文件後,要先藉助GNU Build System生成系統生成源碼結構。在增加了新文件(或目
錄)、修改了文件(或目錄)名、改變文件的保存位置之後,都應該重新生成源碼結構。具體而言,生成源碼結構包括autoconf、automake等操作,把每個子目錄的Makefile.am變成了Makefile.in。具有源碼結構的程序文件包可以在任何UNIX、LINUX的系統上使用簡單的命令(即configure/make/make install等)進行配置、編譯、連接和安裝。
可以執行菜單操作來生成源碼結構:
【Build】→【Run automakeconf】
第四步,配置,即運行configure
configure是一個腳本,用來確定所處系統的細節,比如使用何種編譯器、何種庫,以及編譯器和庫的
保存位置,並把Makefile.in的相應部分進行替換,形成Makefile。
可以執行菜單操作來進行配置:
【Build】→【Run configure】
第五步,編譯連接
執行菜單操作【Build】→【Built Project】即可完成編譯連接,形成可執行文件。默認情況下,這種可執行文件是帶有源碼調試符號的。
對於多文件的程序,一般需要對每一個文件分別進行編譯生成目標文件。當每個文件的編譯通過之後,再統一進行編譯連接。單獨編譯當前正在編輯的文件的菜單操作是:
【Build】→【Compile File】
第六步,運行
如果想在KDevelop的控制下運行已編譯連接好的程序,可以執行菜單操作:
【Build】→【Excecute program】
如果想單獨運行程序,則需要先安裝,然後在命令行中輸入相應的可執行文件的名字(一般來講,就是
工程的名字)即可。KDevelop會把可執行文件放在/usr/local/bin之中
【Build】→【Install】
編寫程序文件
通過菜單操作【Project】→【New Project】啟動新建工程嚮導程序,選擇工程類型,並指定 工程名稱及其保存位置,如圖所示。接下來一路點擊Next即可完成工程的創建工作。
嚮導程序會自動生成一個含有主函數的文件。以此文件是一個模板,在它的基礎上修改並添加代碼,
即可編寫需要的程序。
編譯
程序寫好後,應該把文件保存起來,然後按照前面提到的步驟,生成源碼結構、配置、編譯,即依次
執行如下菜單操作:
【Build】→【Run automakeconf】
【Build】→【Run configure】
【Build】→【Compile File】
每一個操作若能正常完成,在Messages窗口中會出現Success的提示。如果沒有Success的提示,則表明相應的操作失敗,應查明原因。
一般來講,生成源碼結構和配置這兩個操作都能順利通過。
如果編譯連接是首次進行,則一般會失敗,因為很少有人能一次寫出沒有任何語法錯誤的程序。查看
Messages窗口中的提示信息,可以了解哪些地方出現了語法錯誤。單擊某一條錯誤提示信息,KDevelop會自動把光標定位到發生該錯誤的語句上。
依據錯誤提示,修正程序中的語法錯誤,然後再次嘗試編譯,直到出現Success的提示。
經常出現的一種情況是,程序上的一個語法錯誤會導致多條錯誤信息的出現。因此,應該把第一條錯
誤信息認真處理好,再從隨後的錯誤信息中隨機選擇幾條加以處理,然後就再次嘗試編譯,看還有沒有錯誤信息。如此反覆多次,直到把所有的錯誤提示消除掉,編譯就成功了。不要把所有錯誤信息都依次處理完再嘗試編譯,那樣的效率比較低。
生成可執行文件
編譯成功後,執行菜單操作【Build】→【Built Project】即可生成相應的生成可執行文件。
調試
接下來,可以執行菜單操作【Build】→【Excecute program】試運行程序。這種運行是在KDevelop的控制下進行的。因此,如果出現“死循環”,可以執行菜單操作【Build】→【Stop】或按Esc鍵即可中止程序的運行。
如果在程序中存在邏輯錯誤,就得不到期望的結果。邏輯錯誤的排除比較困難。必須對程序進行仔細
的分析才能找到錯誤的原因。
一般的邏輯錯誤可以根據程序的運行表現加以判斷。比較深層次的邏輯錯誤則需要藉助調試工具。
本章前面介紹的調試工具GNU gdb就是一個很好的工具,可以用它對程序進行仔細分析,查找邏輯錯
誤的根源。默認情況下,經過【Build】→【Built Project】操作之後,可以在工程目錄下的/debug/src/中找到帶源代碼調試符號的可執行文件。
發現邏輯錯誤後,就要修改程序,重新編譯連接。然後再試運行。如果仍然得不到期望的結果,說明
程序中還有邏輯錯誤,應再次進行分析。如此反覆多次,直到消除全部的邏輯錯誤。
發布可執行文件
如果只想發布程序的可執行文件,可以先調整項目的編譯連接選項,選擇優化編譯的方式。這樣可以
得到更小更快的可執行文件。
可以通過菜單【Project】→【Build Configuration】修改編譯連接選項。此菜單之下有三種選項,默認為Debug,生成的可執行文件中含有源程序調試符號;還可以選擇 Default或Optimized。選擇Optimized時,編譯連接時將進行優化,生成的可執行文件更小,執行起來也更快。
選擇Debug時,可執行文件保存在工程目錄下的/debug/src/中;選擇Optimized時, 可執行文件保存在工程目錄下的/optimized/src/中;選擇Default時, 可執行文件保存在工程目錄下的/src/中。
如果要發布可執行文件,應該選擇Optimized的方式進行編譯連接。
發布源程序
把工程目錄及其中的所有文件打包即可形成源程序包。用戶得到這個源程序包並解壓後,不必安裝KDevelop 就可以按標準方法進行編譯和安裝,即支持
configure,make,make install,make clean,make uninstall等命令。這個包也含有KDevelop的工程文件和其他相關的信息。因此,如果用戶安裝了KDevelop,可以直接打開該工程進行修改。
如何使用已有的源文件?
在KDevelop主窗口的右側有一個Automake Manager標籤。點擊該標籤,就可以看到本工程源文件所在的文件夾以及各文件。在列有文件的那個窗口上方有工具條,其中就是用來添加文件的。添加文件有兩種方式,一種是鏈接(link)方式,另一種是複製(copy)方式。
2樓
雲淡風輕 發表於:2007-6-15 14:34:31
4.遇到的問題,按照上面的方法編譯第一個程序時遇到了問題:
a)運行Run automakefriend時,報錯:
這是由於沒有安裝automake造成的,解決方法是在終端中運行下列代碼:
b)再次運行Run automakefriend時遇到錯誤:
這是由於沒有安裝libtool造成的,解決方法是
c)終於編程通過了,但是在Excecute program又提示錯誤了:
konsole not found
這是由於沒有安裝konsole造成的,安裝就好了
再次運行,終於看到結果了,收工(*^__^*)
sudo apt-get install konsole
sudo apt-get install libtool
macro `AM_PROG_LIBTOOL’ not found in library
make: *** [all] Error 1
*** Exited with status: 2 ***
sudo apt-get install automake1.9
cd ‘/home/long/code/dev/test’ WANT_AUTOCONF_2_5=”1″ WANT_AUTOMAKE_1_6=”1″ make -f Makefile.cvs
aclocal
make: aclocal:命令未找到
make: *** [all] 錯誤 127
*** Exited with status: 2 ***
c語言生成dat文件
1、首先打開vs軟件,選擇新建一個項目。
2、新建項目後,選擇win32工程,給項目起名字,選擇項目默認的路徑,然後點擊確定。
3、選擇項目的類型為DLL庫,可以選擇建一個空項目,也可以選擇win32項目,不為空,根據自己的需要。
4、然後在項目的源文件中添加一個cpp文件,寫入要編譯的代碼,然後點擊生成。
5、在Vs的輸出界面中就可以看到編譯成功了,會看到生成DLL文件的路徑,也可以自己設置DLL文件的生成路徑。
c語言程序模板
//考慮在輸入非數字或非純數字的時候要報錯
main()
{
char str[100];
int i;
float c, f; //聲明攝氏和華氏溫度變量
printf(“請輸入華氏溫度:”); //提示輸入華氏溫度
scanf(“%s”, str); //將輸入的字符串保存到變量str數組中
for (i = 0; i strlen(str); i++) {
if (str[i] ‘0’ || str[i] ‘9’) {
printf(“輸入不是純數字”);
return;
}
} //判斷輸入的字符串里是否只有數值字符
f = atof(str); //將數值字符轉換成浮點數
c = 5.0 / 9 * (f – 32); //計算攝氏溫度
printf(“攝氏溫度是%0.2f”, c); //保留兩位小數輸出
}
//直接運行通過
在c語言中如何實現函數模板
如果要寫個函數支持多種數據類型,首先想到的就是C++的模板了,但是有時候只能用C語言,比如在linux內核開發中,為了減少代碼量,或者是某面試官的要求…
考慮了一陣子後,就想到了qsort上.qsort的函數原型:
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );
快排時,只要自己實現相應數據類型的比較函數cmpare就可以了.如果比較int型時,一個典型的compare函數如下:
那麼,就是說可以利用void *. void *意指未指定類型,也可以理解為任意類型。其他類型的指針可以直接賦值給void *變量,但是void *變量需要強制類型轉換為其它指針類型。這個相信大家都知道。那麼下面以一個簡單的題目為例,來探討如何在C語言中實現模板函數。
方法1: 利用void *.
在看下面的源程序之前,需要了解幾點。首先,在32位平台上,任何類型的指針所佔的字節都是4個字節,因為32位機器虛擬內存一般為4G,即2的32次方,只要32位即4個字節就可以足夠尋址,sizeof(void *)=4; 其次,雖然各種不同類型的指針所佔的空間都為4個字節,但是不同類型的指針所指的空間的字節數卻不同(這一點尤為重要,下面的程序我在開始沒有調通就因為這點意識不強)。所以,如果你將一個指針強制轉換為另一個類型的指針,指針本身所佔的字節是不變的,但是,如果對這個指針進行運算,比如 *p,p++,p-=1等一般都是不同的。 再次,函數指針應該了解下,這裡不多說。 最後,因為Sandy跟我說,C++開始的時候模板的實現其實就是利用宏替換,在編譯的時候確定類型。所以,為了方便,類型也用了預編譯指令#define。
span#include “stdio.h”/span
span#include “stdlib.h”/span
span//typedef int T; //或者下面的也可以./span
span#define T int/span
//這個FindMin是Sandy寫的.felix021也寫了個,差不多的就不貼出來的.
void FindMin(const void *arr,int arr_size,int arrmembersize,int *index,
int (*cmp)(const void *,const void *b)){
int i;
*index=0;
char *p=(char *)arr;
char *tmp=p;
for (i=1;iarr_size ;i++){
if (cmp(tmp,p)0){
tmp=p;
}
p+=arrmembersize;
}
(*index)=((int)(tmp-arr))/arrmembersize;
}
*//span
可以把指針看作是char *,如果轉換為int *,那下面的位移就不正確了./span
indexspan=/spanispan;/span
span}/span
span}/span
spanreturn/span indexspan;/span
span}/span
spanint/span resultspan;/spanspan//result保存的是最小值索引./span
resultspan=/spanFindMinspan(/spanarr,span12/span,
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/193476.html