工作達人(Job Da Ren)
服務是我架站的宗旨,全球華人及男女青年未來的工作方向

  • Home
  • About achi
    • My Disclosure Policy
  • Archives
    • Link Exchange
  • 隱私權政策
  • stock photos
  • Contact
  • Top Posts
  • Poll
  • wp-buzz
    • ㄚ琪的Live PR
  • Advertise
Job Da Ren > CompScience > Programming > Languages > C_and_CPP

Archive for the ‘C_and_CPP’ Category

« Older Entries

 Powered by Max Banner Ads 

基本C++

2010-09-17,Last modified: 2012-03-02Please wait

 Powered by Max Banner Ads 

這個教學系列的目的是針對每個人:即使你以前沒有設計過程式或是你在其他的程式語言有相當的經驗並且想要擴展到C++!這可以給每一個人想要擁有一個可執行的程式那種成就感。

我的意思是什麼?C++是一種程式語言—它允許你控制你的電腦,讓它做你想要它做的,這個程式語言教學系列會幫你獲得C++的好處。

開始設定 – C++ 編譯器

在開始瞭解C++之前,你第一件要做的就是確定你有編譯器,什麼是編譯器,你問?編譯器就是將你寫的程式轉變成你的電腦可以真正瞭解並執行的執行檔,假如你是參加一個課程,你可能會透過你的學校取得一個編譯器,假如你是開始自己學,你最好的選擇就是使用Code::Blocks,我們在設定Code::Blocks這頁將會很詳細地帶你通過設定Code::Blocks編譯器。

進階編譯器資料

如果你有一些以前的經驗,或者只是想要一個選擇的菜單,你應該知道有一些常用的編譯器,假如你是程式設計新手,就跳過這節!
一些常用的編譯器包括Borland C++、Microsoft C++跟GNU C++。
不同的編譯器也有許多前端的環境–最常見的有使用GNU G++ 編譯器的Dev-C++,有一些像是G++是免費的,有些則不是,請見編譯器列表 有更多關於如何取得編譯器及設定的資訊。
這些編譯器每一個都有些不同,每一個應該支援ANSI/ISO標準C++函式,但每一個編譯器也會有不標準的函式(這些函式類似於一個國家的不同區域的口語或俚語那樣),當你用不同編譯器試著編譯原始碼(由程式設計師所寫的C++並存為一個文字檔)的時候不標準的函式有時候會造成問題,這些使用ANSI/ISO標準C++的教學應該不會有這個問題(有足夠現代的編譯器),注意假如你使用較舊的編譯器,像是TCLite,你應該你應該閱讀檢查一些相容性問題。

進入C++語言

一個C++程式就是一個命令的集合,告訴電腦做”一些事”,這些命令的集合通常稱作C++原始碼、原始碼或只是程式碼,命令不是”函式”就是”關鍵字”,關鍵字是一個語言基本的建構方塊,事實上,函式也是,通常是由簡單的函式寫成–你會看到我們第一個程式在下面(搞混了嗎?你可以把它想成是一本書的大綱;大綱可以看出書裡的每一章;每一章也有它自己的大綱,這些是由節組成的。每一節可以有自己的大綱,也有可能是寫出的細節),幸運的是,c + +提供了許多你可以使用的常用函式和關鍵字。
但是一個程式是如何真正地開始?每個C++的程式都會有一個函式,叫做main,它總是在你的程式一開始執行的時候就呼叫,對於main,你也可以呼叫其他的函式,不管他們是我們寫出來的,又或是前面提到的是由編譯器提供的
所以你如何取得那些預寫的函式?要取得那些編譯器所擁有的標準函式,你可以含括一個#include的前置指令,這樣做可以有效地將每件事放在標頭檔中然後貼到你的程式中,讓我們看看一個正在使用的程式:

#include <iostream>

using namespace std;

int main()
{
  cout<<"HEY, you, I'm alive! Oh, and Hello World!\n";
  cin.get();
}

讓我們看看程式的元素,這個#include是一個”前置處理器”指令,告訴編譯器在真正建置執行檔前從一個叫做iostream的標頭檔放程式碼到我們的程式中,藉著含括標頭檔,你獲得存取許多不同函式的權限,例如,cout函式需要iostream,include之後是敘述”using namespace std;”,這一行告訴編譯器使用標準函式庫(std)的一部分函式,藉著在檔案前面含括這一行,你允許程式使用像是cout的程式,分號是C++語法的一部分,它告訴編譯器這是一個命令的結束,你稍後會看到分號被用在C++很多的命令結束部份。

接下來重要的一行是int main(),這一行告訴編譯器有一個函式叫做main,這個函式會傳回一個整數,因此寫int,這個”大括號” ({ 跟 })表示函式跟其他程式區塊的開始跟結束,你可以把他們想成是BEGIN跟END的意義。

程式的下一行看起來有點奇怪,假如你有寫過其他的程式語言的話,你可能會認為是用來顯示字串的print函式,然而在C++裡,這個cout物件用來顯示文字(唸作”C out”),它使用<<符號,就是我們所知的”插入運算子”,表示有什麼要輸出,cout<<導致隨後的文字作為這個函式的參數,引號告訴編譯器,你要輸出的字串原樣,’\n’序號實際上是被視為一個單一的字元,代表著一個新行(我們稍後會有更詳細的說明),它移動螢幕上的游標到下一行,再一次注意到分號,它被加在很多行的後面,像是C++的函式呼叫。

下一個命令是cin.get(),這是另一個函式呼叫:它讀取輸入並且期望使用者按下ENTER鍵,很多編譯器環境會開啟一個命令列視窗,執行程式,然後關閉視窗,這個命令會讓視窗不會關閉因為程式尚未完成因為它正等著你按下ENTER鍵,含括這一行會給你時間來看看程式的執行。

在到達main的結尾,結束的括號,我們的程式會傳回0的值(而且是整數,這也是為什麼我們會告訴main傳回一個int)給作業系統。這個傳回值是重要的,它可以用來告訴OS我們的程式是否成功,傳回0的值表示成功,而且是自動傳回(但這有main這樣,其他的函式需要你手動傳回一個值),但是假如我們想要傳回其他的東西,像是1,我們就必須有一個處理return的敘述:

#include <iostream>

using namespace std;

int main()
{
  cout<<"HEY, you, I'm alive! Oh, and Hello World!\n";
  cin.get();

  return 1;
}

最後的括號結束函式,你可以試著編譯這程式並且執行它,你可以將程式碼剪下貼到檔案裡,將它存成.cpp檔,我們的Code::Blocks教學可以帶你建置一個簡單的程式,所以如果你搞混了就檢查看看。

假如你沒有使用Code::Blocks,你應該閱讀編譯器關於如何編譯的資訊說明。

一旦你拿到第一隻程式執行,為什麼不試著玩一玩cout函式來適應C++的撰寫?

在你程式的旁邊註解

當你學習程式設計時,你應該也開始要學習如何解釋你的程式(如果沒有其他人就是為你自己),你可以增加註解到程式碼中;我會常常使用註解來幫註解事程式碼範例。

當你告訴編譯器有一段的文字是註解,它會在執行程式碼的時候忽略它,允許你使用任何的文字來描述你真實的程式碼,要新增一個註解不是使用 //來告訴編譯器這一行之後是一個註解,就是用 /* 然後 */來區隔這之間的文字是一個註解,在某些的編譯器環境中會改變註解區域的顏色,但是有些則不會,確定不要意外地將你需要的程式碼給註解起來(那就是說,告訴編譯器說你的程式碼某個部份是註解),當你學習程式設計時,能夠將一段程式碼註解起來是有用的因為這樣可以看出這個輸出是怎樣。

使用者互動跟使用變數儲存資訊

到目前為止你已經學了如何寫一個簡單的程式來顯示程式設計師就是你所輸入的資訊,以及如何用註解來描述你的程式,那很棒,但是關於跟你的使用者互動呢?幸運地,也有可能讓你的程式來接受輸入了,你所要用的函式被稱為cin,而且後面會有插入運算子>>。

當然,在你試著接受輸入之前,你必須有一個地方可以儲存輸入,在程式設計裡,輸入跟資料被儲存在變數裡,有幾個不同的變數型態來儲存不同種類的資訊(例如,數值對字母);當你告訴電腦你宣告一個變數,你必須含括資料型態還有變數名稱,幾個基本的型態包括char、int跟float。

一個char型態的變數儲存一個單一字元,int型態的變數儲存整數(沒有小數點的數值),而float型態的變數儲存有小數點的數值,每一個變數型態 – char、int跟float – 是一個你在宣告一個變數時使用的關鍵字。

所有這些變數型態做什麼用?

有時候有這麼多種變數型態當它看起來像某些變數型態是多餘的時候會令人難以理解的(為什麼當你有浮點數時用整數數字),使用正確的變數型態讓你的程式碼可以閱讀跟有效率是很重要的–有些變數需要比其他變數還要多的記憶體,此外。因為數字儲存的方式是真正存在記憶體內,浮點數是”不精確的”,而且在你需要儲存一個”精確的”整數值不能夠使用。

在C++裡宣告變數

要宣告變數你要使用語法”type <name>;”,這裡有一些變數宣告的範例:

int x;
char letter;
float the_float;

在同一行宣告相同型態的多個變數是允許的;每一個變數應該用逗號分隔。

int a, b, c, d;

假如你注意看,你可能看到宣告一個變數之後會加上分號(注意這跟你呼叫一個函式是相同的程序)。

在C++裡宣告變數常見的錯誤

假如你嘗試使用一個未經宣告的變數,你的程式將不能編譯或執行,之後你會收到一個錯誤訊息通知你犯了一個錯誤,通常,這稱作未宣告的變數。

大小寫區分

現在是時候來討論一個你很容易丟的一個重要觀念,大小寫區分,基本上,在C++裡,不論你是使用大寫或小寫字母,這個Cat跟cat兩個字的意義對編譯器來說是不同的,在C++裡,所有的語言關鍵字,所有的函式和所有的變數都是大小寫區分的,在例子裡你的變數宣告跟變數的使用不同就是你可能會得到一個沒有宣告的變數錯誤的原因。

使用變數

Ok,所以你現在知道如何告訴編譯器變數的事,但是有關於使用他們的事嗎

這裡有一個範例程式描述變數的使用:

#include <iostream>

using namespace std;

int main()
{
  int thisisanumber;

  cout<<"Please enter a number: ";
  cin>> thisisanumber;
  cin.ignore();
  cout<<"You entered: "<< thisisanumber <<"\n";
  cin.get();
}

讓我們掰開這一個程式,並逐行檢查,關鍵字int宣告thisisanumber是一個整數,函式cin>> 讀取一個值到thisisanumber;使用者在數植被程式讀取前按下enter,cin.ignore() 是另一個讀取並拋棄一個字元的函式,記住當你輸入到程式的時候,它也會用到enter鍵,我不需要這個,所以我們要把它丟掉,記住變數被宣告為整數,假如使用者嘗試輸入一個有小數的數值,它會被截掉(那就是,數值的小數部份會被忽略),當你執行範例程式時試著輸入一列的字元或是一個有小數的數字;回應會隨著輸入的不同而不同,但是在任何情況下都非常地漂亮,注意在印出變數的時候不需要加引號,如果有引號,輸出就會是 “You Entered: thisisanumber.”,少了引號通知編譯器這是一個變數,因此程式會檢查變數值以便在執行輸出函式時可以將變數名稱取代為變數,不要被一行內用了兩個新增運算子而搞混,一行內含括多個新增運算子是可以完全接受的,而且所有的輸出會在相同的地方,事實上,你必須用它自己的新增運算子(<<)來分隔幾個字串常數(有用引號刮起來的字串)跟變數,試著將兩個變數放在一起然後只用一個 << 會有錯誤訊息給你,不要這樣嘗試,不要忘記結束函式跟宣告要用分號,假如你忘記分號,在你試著編譯程式的時候,編譯器會給你一個錯誤訊息。

感遍及比較變數

當然,不論你使用什麼型態,變數不能修改就會無趣,一些變數使用的運算子有下列:*、-、+、/、=、==、>、<,* 乘法、 – 減法跟 + 加法,當然也要瞭解倒要修改成事裡的變數值要使用等號也是相當重要的,在某些語言裡面,等號比較左邊跟右邊的值,但是在C++裡面是用 == 來做比較,等號仍然相當有用,變數設置在等號左邊,必須有一個而且只有一個變數等於等號右邊的值,這個執行數學函式的運算子用在等號右邊是為了將結果指定到左邊的變數,這裡有一些範例:

a = 4 * 6; // (Note use of comments and of semicolon) a is 24
a = a + 5; // a equals the original value of a with five added to it
a == 5     // Does NOT assign five to a. Rather, it checks to see if a equals 5.

另一個等號形式,==,它不是用來指定值給變數,相反地,它檢查變數是否相等,它在其它C++的領域裡頭也很有用;舉例來說,你會常使用 == 在條件敘述跟迴圈這樣的建構式中,你能會猜 < 跟 > 的功能為何,他們是大於跟小於的運算子。

舉個例說:

a < 5  // Checks to see if a is less than five
a > 5  // Checks to see if a is greater than five
a == 5 // Checks to see if a equals five, for good measure

比較變數要只到你有使用到結果的時候才會真正有用 –那是第2課的課程if敘述 要討論的。

你是否可以跟到? 測驗一下吧

下一課: If 敘述 – 有條件地改變程式的行為

回到教學的目錄

Print Friendly

Tags: borland c, C#, C++ compiler, C++ programming, C++ tutorial, code blocks, DJGPPorials, gnu c, programmers, source code, tutorials, 原始碼, 教學, 編譯器
Posted in C_and_CPP | 1 Comment »

解析度不夠不能玩GTK

2012-03-01,Last modified: 2012-02-23Please wait

 Powered by Max Banner Ads 

這幾天試著用Code::Blocks來編譯GTK的程式,發現使用這個GTK 2.24的all-in-one bundle會有一些問題,第一個問題就是找不到gdk-pixbuf-2.0的問題,這個問題Google的到答案,用

project.AddIncludeDir(GtkPathDefaultInc + wxFILE_SEP_PATH + _T(“gdk-pixbuf-2.0″));

這一行加入到C:\Program Files\CodeBlocks\share\CodeBlocks\templates\wizard\gtk這裡wizard.script中的125行,就可以解決了,這一行跟124行那邊的指令碼相似,看起來就知道是在搜尋gdk-pixbuf-2.0的路徑。

第二個問題就難解了,我得到這樣的訊息:

(20120223.exe:840): Gdk-WARNING **: gdk_win32_pixmap_new: depth = 16 not support
ed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_new_with_values: assertion `drawable
!= NULL’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_set_colormap: assertion `GDK_IS_GC (
gc)’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_new_with_values: assertion `drawable
!= NULL’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_set_colormap: assertion `GDK_IS_GC (
gc)’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_new_with_values: assertion `drawable
!= NULL’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_set_colormap: assertion `GDK_IS_GC (
gc)’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_new_with_values: assertion `drawable
!= NULL’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_set_colormap: assertion `GDK_IS_GC (
gc)’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_new_with_values: assertion `drawable
!= NULL’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_set_colormap: assertion `GDK_IS_GC (
gc)’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_new_with_values: assertion `drawable
!= NULL’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_set_colormap: assertion `GDK_IS_GC (
gc)’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_new_with_values: assertion `drawable
!= NULL’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_set_colormap: assertion `GDK_IS_GC (
gc)’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_new_with_values: assertion `drawable
!= NULL’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_set_colormap: assertion `GDK_IS_GC (
gc)’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_new_with_values: assertion `drawable
!= NULL’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_set_colormap: assertion `GDK_IS_GC (
gc)’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_new_with_values: assertion `drawable
!= NULL’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_set_colormap: assertion `GDK_IS_GC (
gc)’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_new_with_values: assertion `drawable
!= NULL’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_set_colormap: assertion `GDK_IS_GC (
gc)’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_new_with_values: assertion `drawable
!= NULL’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_set_colormap: assertion `GDK_IS_GC (
gc)’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_new_with_values: assertion `drawable
!= NULL’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_set_colormap: assertion `GDK_IS_GC (
gc)’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_new_with_values: assertion `drawable
!= NULL’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_set_colormap: assertion `GDK_IS_GC (
gc)’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_new_with_values: assertion `drawable
!= NULL’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_set_colormap: assertion `GDK_IS_GC (
gc)’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_new_with_values: assertion `drawable
!= NULL’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_gc_set_colormap: assertion `GDK_IS_GC (
gc)’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_draw_rectangle: assertion `GDK_IS_GC (g
c)’ failed

(20120223.exe:840): Pango-WARNING **: couldn’t load font “新細明體 Not-Rotated 9
“, falling back to “Sans Not-Rotated 9″, expect ugly output.

(20120223.exe:840): Gdk-WARNING **: gdk_win32_pixmap_new: depth = 16 not support
ed

(20120223.exe:840): GLib-GObject-CRITICAL **: g_object_ref: assertion `G_IS_OBJE
CT (object)’ failed

(20120223.exe:840): Gdk-CRITICAL **: gdk_drawable_get_size: assertion `GDK_IS_DR
AWABLE (drawable)’ failed

可以正常編譯,但是執行就會有這樣複雜的錯誤訊息,後來還是Google到說我的顯示卡設定有問題,咦,有點印象了,因為之前電腦太慢,把解析度設成

2012-02-23_163311

色彩品質為中(16位元)了,Orz,改設回最高(32位元)吧。問題終於解決,但是另外有個問題,如果我只能玩16為元的顯示,那GTK可以玩嗎?

Print Friendly

Posted in C_and_CPP, LinuxDev | No Comments »

設定C和C++ Code::Blocks編譯器的初學者教學指南

2012-02-29,Last modified: 2012-02-23Please wait

 Powered by Max Banner Ads 

這篇指南是來自cprogramming的Thomas Carriero文章,ㄚ琪試著用作者的建議來安裝Code::Blocks並翻譯他的原文給華人朋友看看,希望可以在編譯C++的時候有更多的工具可以比較使用。

這份教學提供你設定編譯器(MINGW compiler)簡易遵循的操作,ㄚ琪有更新螢幕截圖,另外這個編譯器是一個可以讓你轉換你寫的程式碼成為程式的工具,而Code::Blocks是一個免費的C跟C++的開發環境,這份教學說明如何在Windows 2000、XP、Vista 或 Windows 7安裝Code::Blocks。注意:假如你是執行Linux,請到這裡學習如何使用GCC;假如你是用OS X,請到這裡使用Apple XCode來取得設定。

另外本篇的螢幕截圖是在Windows XP下的狀況,在其他不同的Windows版本下,可能也會有不同的圖片。

步驟1:下載Code::Blocks

  • 到這個網站:http://www.codeblocks.org/downloads
  • 跟著連結到”Download the binary release”(或直接點此)
  • 到Windows 2000 / XP / Vista / 7 這個部份
    • 看看檔案的名字是否有包括mingw。(截至ㄚ琪發稿的名稱應該還是codeblocks-10.05mingw-setup.exe;10.05是版本別可能會因不同時間而不同)。
  • 儲存檔案到你的桌面,檔案大概有74MB。

步驟2:安裝Code::Blocks

雙擊安裝程式。 2012-02-21_104915

選擇完整安裝 2012-02-21_104940

按Next >幾次,有些設定的教學會假定你安裝在C:\Program Files\CodeBlocks (這是預設的安裝位置),但是你可以安裝到任何地方假如你喜歡的話

2012-02-21_105221

啟動Code::Blocks,按是

2012-02-21_105245

步驟3:執行Code::Blocks

系統將提示你自動偵測到的編譯器視窗:

2012-02-21_105334

ㄚ琪的系統上明顯地比原文多很多

2012-02-21_105344

2012-02-21_105450

其實還有這個提示視窗,可以依照你的需求關閉或是繼續看下一個,還有選擇下一次開啟時要不要看這個。

2012-02-21_105531

當你看到編譯器自動偵測的視窗時,只要按OK就行了,接著Code::Blocks會問你是否想要跟C/C++檔案關聯,這是預設的選擇–我建議你也這樣做,按OK。

2012-02-21_105613

Code::Blocks啟動後的長相

2012-02-21_105558

這個視窗也可以關閉掉。

點擊File選單->下面的”New”->選擇 “Project…”
下面的視窗就會出現:

2012-02-21_105915

點擊”Console Application”然後按”Go”按鈕。

2012-02-21_105952

有個歡迎視窗,不關它按Next。
接著出現語言的選擇對話框:

2012-02-21_110001

你會被問到你要選C或C++,假如你不確定,就使用C++,否則,選擇你正在學習的語言(你會發現這裡有C跟C++的教學)。
之後按”Next”,接下來Code::Blocks會提示你要在哪儲存控制台應用程式:

2012-02-21_110211

我會建議你放在自擠得資料夾中,然後它會新增幾個檔案(這在你建構其他型態的專案更是如此),你會需要給定你的專案名稱,任何名稱都可以。

點擊”Next”,接著會提示你設定你的編譯器:

2012-02-21_110251

你不需要做任何事,只要接受預設的選項然後按”Finish”。
現在你可以開啟左邊的main.cpp:

2012-02-21_110435

(假如你沒有看到main.cpp你可能需要展開”Sources”資料夾的內容)
這時,你會有你的main.cpp檔案,你可以改成你喜歡的,現在,只要讓它說”Hello World!”,所以我們可以執行它,按F9,會先編譯然後執行。

2012-02-21_110609

疑難排解

假如沒辦法執行最常看到的錯誤訊息會像是

“CB01 – Debug” uses an invalid compiler. Probably the toolchain path within the compiler options is not setup correctly?! Skipping…”

首先,確定你下載正確的Code::Blocks版本,這個版本會包括MinGW,假如無法解決問題,它可能會是編譯器自動偵測的問題,這裡會告訴你如何檢查你目前”自動偵測的”狀態,到”Settings|Compiler and Debugger…”,接著在左邊,選擇”Global Compiler Settings” (它有一個齒輪的圖示)然後在右邊,選擇”Toolchain executables”標籤,這個標籤有一個”Auto-detect”按鈕是你可以使用的,那可以修正問題–假如沒辦法,你可以手動填寫表單,這裡有一個截圖說明我的系統是長怎樣,假如跟你安裝的路徑不同變更”Compiler’s installation directory”這裡標示的路徑,接著確認所填寫的每件事。

2012-02-21_110903

一旦你做完這件事,再試著按F9看看你是否可以執行程式。

繼續基本C++ (或 C的基礎知識)。

Print Friendly

Tags: code::blocks, code::blocks c++ ide, code::blocks compiler, code::blocks ide, compiler, Debugger, Microsoft Windows, MinGW, mingw code::blocks, mingw ide, mingw windows, Operating system, Programming, windows xp, 教學
Posted in C_and_CPP, 軟體報報 | No Comments »

Strong Static Typing

2008-06-20,Last modified: 2012-02-21Please wait

C++ Primer 4/e 在變數這裡有一個關鍵概念:『

C++ is a statically typed language, which means that types are checked at compile time. The process by which types are checked is referred to as type-checking.

In most languages, the type of an object constrains the operations that the object can perform. If the type does not support a given operation, then an object of that type cannot perform that operation.

In C++, whether an operation is legal or not is checked at compile time. When we write an expression, the compiler checks that the objects used in the expression are used in ways that are defined by the type of the objects. If not, the compiler generates an error message; an executable file is not produced.

As our programs, and the types we use, get more complicated, we’ll see that static type checking helps find bugs in our programs earlier. A consequence of static checking is that the type of every entity used in our programs must be known to the compiler. Hence, we must define the type of a variable before we can use that variable in our programs.』

中文版的是這樣說:『C++是個靜態型別語言,意思是型別在編譯期被檢查。型別被檢查的過程稱為型別檢驗。

在大部分語言中,物件的型別限制了該物件能夠執行的操作。如果物件的型別不支援某個操作,這個物件就不能執行那項操作。

在C++中,一個操作是否合法,將在編譯期被檢查。當我們寫下一個算式,編譯器會檢查算式裡用到的物件是否按其型別所定義的方法來使用。如果不是,編譯器會產出一個錯誤訊息,不產出可執行檔。

隨著我們的程式和使用的型別愈來愈複雜,我們會看到,靜態型別檢驗有助於早期找出程式臭蟲。靜態檢驗的一個結果是,程式用到的每一個物體的型別都必須為編譯器所知。因此我們必須在程式使用某個變數之前先定義好該變數的型別。』

PHP好像沒有這樣玩,玩久了PHP再去寫C或C++就死得很慘。

Print Friendly

Tags: executable file, static type
Posted in C_and_CPP | No Comments »

GTK+ 2.0 教學-視埠 Viewports

2008-02-27,Last modified: 2011-12-07Please wait

一般很少直接使用視埠(Viewport)元件。多數情況下是使用捲動視窗元件,它內部使用了視埠。

視埠元件允許在其中放置一個超過自身大小的元件,這樣你可以一次看元件的一部分。它用調整物件定義當前顯示的區域。

用下面的函式創建一個視埠。

GtkWidget *gtk_viewport_new( GtkAdjustment *hadjustment,
                             GtkAdjustment *vadjustment );

可以看到,創建元件時能夠指定元件使用的水平和垂直調整物件。如果給函式傳遞 NULL 參數,元件會自己創建調整物件。

創建元件後,可以用下面四個函式取得和設置它的調整物件:

GtkAdjustment *gtk_viewport_get_hadjustment (GtkViewport *viewport );

GtkAdjustment *gtk_viewport_get_vadjustment (GtkViewport *viewport );

void gtk_viewport_set_hadjustment( GtkViewport   *viewport,
                                   GtkAdjustment *adjustment );

void gtk_viewport_set_vadjustment( GtkViewport   *viewport,
                                   GtkAdjustment *adjustment );

剩下的這個函式用於改變視埠的外觀:

void gtk_viewport_set_shadow_type( GtkViewport   *viewport,
                                   GtkShadowType  type );

type參數可以取以下值:

  GTK_SHADOW_NONE,
  GTK_SHADOW_IN,
  GTK_SHADOW_OUT,
  GTK_SHADOW_ETCHED_IN,
  GTK_SHADOW_ETCHED_OUT
« GTK+ 2.0 教學-窗格視窗元件 Paned Window Widgets
單元首頁
GTK+ 2.0 教學-捲動視窗 Scrolled Windows »
Print Friendly

Tags: gtk, tutorial, 教學
Posted in C_and_CPP, LinuxDev | 1 Comment »

GTK+ 2.0 教學-雜項元件

2008-02-26,Last modified: 2011-12-05Please wait

標籤 Labels

標籤(Labels)是 GTK 中最常用的元件,實際上它很簡單。因為沒有相關聯的 X 視窗,標籤不能引發信號。如果需要獲取或引發信號,可以將它放在一個事件盒中,或放在按鈕元件裡面。

用以下函式創建一個新標籤:

GtkWidget *gtk_label_new( const char *str );

GtkWidget *gtk_label_new_with_mnemonic( const char *str );

唯一的參數是要由標籤顯示的字串。

創建標籤後,要改變標籤你的文字,用以下函式:

void gtk_label_set_text( GtkLabel   *label,
                         const char *str );

第一參數是前面創建的標籤(用 GTK_LABEL() 巨集轉換),第二個參數是新的字串。

如果需要,新字串需要的空間會做自動調整。在字串中放置換行字元,可以創建多行標籤。

用以下函式取得標籤的當前文字:

const gchar* gtk_label_get_text( GtkLabel  *label );

不要釋放返回的字串,因為 GTK 內部要使用它。

標籤的文字可以用以下函式設置對齊方式:

void gtk_label_set_justify( GtkLabel         *label,
                            GtkJustification  jtype );

jtype 的值可以是:

  GTK_JUSTIFY_LEFT  左對齊
  GTK_JUSTIFY_RIGHT  右對齊
  GTK_JUSTIFY_CENTER  居中對齊(預設)
  GTK_JUSTIFY_FILL  充滿

標籤元件的文字會自動換行。用以下函式來啟用「自動換行」:

void gtk_label_set_line_wrap (GtkLabel *label,
                              gboolean  wrap);

wrap參數可取 TRUE 或 FALSE。

如果想要使標籤加下劃線,可以在標籤中設置顯示模式:

void       gtk_label_set_pattern   (GtkLabel          *label,
                                    const gchar       *pattern);

pattern 參數指定下劃線的外觀。它由一串下劃線和空格組成。下劃線指示標籤的相應字元應該加一個下劃線。例如,"__ __" 將在標籤的第1、第2個字元和第8、第9個字元加下劃線。

Note 如果你只是想創建一個用下劃線代表快捷鍵(“mnemonic”)的標籤,你應該用 gtk_label_new_with_mnemonic() 或 gtk_label_set_text_with_mnemonic(),而不是用 gtk_label_set_pattern()。

下面是一個說明這些函式的簡短範例。這個範例用框架元件(Frame widget)能更好地示範標籤的風格。現在你不用理會這點,框架元件以後再作介紹。

在 GTK+ 2.0 裡,標籤文字裡能包含改變字型等文字屬性的標記 ,並且標籤能設置為可以被選擇(用來複製-貼上)。這些進階特性在這裡並不介紹。

#include <gtk/gtk.h>

int main( int   argc,
          char *argv[] )
{
  static GtkWidget *window = NULL;
  GtkWidget *hbox;
  GtkWidget *vbox;
  GtkWidget *frame;
  GtkWidget *label;

  /* 初始化 */
  gtk_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  g_signal_connect (window, "destroy",
		    G_CALLBACK (gtk_main_quit),
		    NULL);

  gtk_window_set_title (GTK_WINDOW (window), "Label");
  vbox = gtk_vbox_new (FALSE, 5);
  hbox = gtk_hbox_new (FALSE, 5);
  gtk_container_add (GTK_CONTAINER (window), hbox);
  gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
  gtk_container_set_border_width (GTK_CONTAINER (window), 5);

  frame = gtk_frame_new ("Normal Label");
  label = gtk_label_new ("This is a Normal label");
  gtk_container_add (GTK_CONTAINER (frame), label);
  gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);

  frame = gtk_frame_new ("Multi-line Label");
  label = gtk_label_new ("This is a Multi-line label.\nSecond line\n" \
			 "Third line");
  gtk_container_add (GTK_CONTAINER (frame), label);
  gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);

  frame = gtk_frame_new ("Left Justified Label");
  label = gtk_label_new ("This is a Left-Justified\n" \
			 "Multi-line label.\nThird      line");
  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
  gtk_container_add (GTK_CONTAINER (frame), label);
  gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);

  frame = gtk_frame_new ("Right Justified Label");
  label = gtk_label_new ("This is a Right-Justified\nMulti-line label.\n" \
			 "Fourth line, (j/k)");
  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
  gtk_container_add (GTK_CONTAINER (frame), label);
  gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);

  vbox = gtk_vbox_new (FALSE, 5);
  gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
  frame = gtk_frame_new ("Line wrapped label");
  label = gtk_label_new ("This is an example of a line-wrapped label.  It " \
			 "should not be taking up the entire             " /* 用一段較長的空白字元來測試空白的自動排列 */\
			 "width allocated to it, but automatically " \
			 "wraps the words to fit.  " \
			 "The time has come, for all good men, to come to " \
			 "the aid of their party.  " \
			 "The sixth sheik's six sheep's sick.\n" \
			 "     It supports multiple paragraphs correctly, " \
			 "and  correctly   adds "\
			 "many          extra  spaces. ");
  gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
  gtk_container_add (GTK_CONTAINER (frame), label);
  gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);

  frame = gtk_frame_new ("Filled, wrapped label");
  label = gtk_label_new ("This is an example of a line-wrapped, filled label.  " \
			 "It should be taking "\
			 "up the entire              width allocated to it.  " \
			 "Here is a sentence to prove "\
			 "my point.  Here is another sentence. "\
			 "Here comes the sun, do de do de do.\n"\
			 "    This is a new paragraph.\n"\
			 "    This is another newer, longer, better " \
			 "paragraph.  It is coming to an end, "\
			 "unfortunately.");
  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL);
  gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
  gtk_container_add (GTK_CONTAINER (frame), label);
  gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);

  frame = gtk_frame_new ("Underlined label");
  label = gtk_label_new ("This label is underlined!\n"
			 "This one is underlined in quite a funky fashion");
  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
  gtk_label_set_pattern (GTK_LABEL (label),
			 "_________________________ _ _________ _ ______     __ _______ ___");
  gtk_container_add (GTK_CONTAINER (frame), label);
  gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);

  gtk_widget_show_all (window);

  gtk_main ();

  return 0;
}
Print Friendly

Tags: gtk, Labels, Window
Posted in C_and_CPP, LinuxDev | 1 Comment »

« Older Entries
  • 1
  • 2
  • 3
  • ...
  • 19
  • 下一頁>

廠商贊助

贊助廠商連結請點我

最新照片

P3080170 IMAGE_950 DSC_6301 P1151495 P1121445 P4121410 P3070121 DSC_6158 cats
觀看更多的相片 >

熱門文章

  • GTK+ 2.0 教學 - 13,446 views
  • jQuery UI入門 - 7,623 views
  • 介紹NetBeans下的Android開發 - 6,967 views
  • 正確使用java array - 5,898 views
  • eclipse 3.4.1 中文 好好玩 - 5,125 views
  • 程式語言教學 – C、C++、OpenGL、STL - 4,233 views
  • GTK+ 2.0 教學-從這裡開始 - 3,648 views
  • jQuery UI 的 Demos展示及說明文件 - 3,562 views
  • Python 圖形使用者介面程式設計 - 2,813 views
  • 如何在手機裡安裝Java ME應用程式 - 2,603 views
  • Microsoft Visual C# 2010 Express更新 - 2,532 views
  • sudo apt-get install sun-java5-jdk - 2,332 views

隨便看看

  • Name Lookup in Class Templates
  • 短碼寫手推薦書單
  • new Expression versus operator new Function
  • C++ Facebook REST Client
  • Polymorphism in C++
  • Visual Studio 2005 編譯 emule
  • Concrete and Abstract Types
  • Library string Type and String Literals
  • 二分帶座標與經緯度
  • Make libffi Fail And Boxed Me In

懶得上網看文章!

就來訂閱我的電子報吧!

輸入你的電子郵件地址:

發送者為 FeedBurner

近期文章

  • 感興趣的xampp-win32-1.7.7
  • 與其給我邀請送禮物,倒不如幫工作達人按讚
  • 【夏日保養】小心辦公室冷氣,讓雙手提早變老!
  • 成人紙尿褲價格戰 苦了父母
  • Smart Life創意無痕壁貼
  • 不用出國的專業全美語兒童營隊
  • 試用BUGSLOCK純天然香茅防蚊手環(防蚊效果一級棒)
  • 多功能的除污達人
  • 五月連結Fun Taiwan送【DIANA】愛媽咪施華洛彩鑽項鍊
  • 網購熱銷缺貨!titan抗菌活力襪,抑菌除臭、護腳2合1

鳥鳴啾啾

    Follow Me on Twitter

    與我交誼!做我的粉絲!

    • technorati
    • Twitter

    其它

    • 登入
    • 文章 RSS 訂閱
    • 迴響 RSS 訂閱
    • WordPress.org

    快上www.blognews.com.tw,就有機會天天免費吃大餐!

    我的書摘

    RSS 科技新聞 – 頭條新聞 – Yahoo!奇摩新聞

    • 摩托行動侵權 部分手機遭禁 2012/05/19
    • 臉書掛牌上市 電腦出包 2012/05/19
    • 揭祕深海不明物體 專家:罕見水母! 2012/05/19
    • 大馬發明展 台灣學子溫馨奪金 2012/05/19
    • 亞洲市場成長趨緩 臉書新挑戰 2012/05/18
    • 蘋果亞馬遜相爭 面板雙虎得利 2012/05/18
    • 擁近10億用戶個資 將是獲利關鍵 2012/05/18
    • 小行星撞地球 中日菲會重創 2012/05/18
    • 小行星若撞地球 大陸先遭殃 2012/05/18
    • 英「條碼」小鎮 維基百科導遊 2012/05/18
    • 臉書濫用個資 人權組織要告 2012/05/18
    • 美報告:陸藉西方科技壯大軍力 2012/05/18
    • 點閱率低 臉書廣告效果惹議 2012/05/18
    • 英小鎮掃條碼 維基百科當導遊 2012/05/18
    • 玻璃構成的一天 影片解密未來世界 2012/05/18

    Blogroll

    • 628之巨蟹座的水世界
    • Blog語法研究室
    • Chip123創新論壇
    • Chungyuchen's Blog
    • Daphne's Fresh Look
    • Frank的雜記
    • Fun Taiwan
    • GOWEIS的好康分享記事簿
    • L K K 的心聲
    • LuckyDog 抽獎達人
    • Office 達人空間(章美蘭)
    • Potato的探索樂園
    • QK3000小遊戲
    • Russian Brides
    • Web Game @Live
    • yal's blog
    • 《心靈翅膀》發現不同的聲音
    • 『PDF』點滴夯發現
    • ㄚ晟的IT筆記
    • 企鵝碎碎唸
    • 傑尼斯部落
    • 免費訊息軟體下載
    • 免費軟體下載
    • 凱特打結該該叫
    • 台中蔣小姐
    • 台灣天氣網
    • 台灣排行榜 Rank.tw
    • 台灣部落格網站目錄
    • 嗡財財嚕嚕唆哈
    • 大紀元賀卡城
    • 好朋友二手家具
    • 小遊戲388
    • 小遊戲天堂
    • 小邱邱的測量放樣工程
    • 拆組達人
    • 敗家誌°
    • 時間不等於金錢
    • 月光下的嘆息!
    • 梅森手扎
    • 淘淘寶小遊戲天堂區
    • 玩物尚誌
    • 生活工場家
    • 白文MIMI與小鸚KIKI的生活記事
    • 紅色死神
    • 綠色工廠 Easylife Blog
    • 網路聯盟行銷中心
    • 美食美景紐西蘭美女的家
    • 蓉兒ㄉ天空
    • 遊戲世界
    • 遊戲阿布
    • 遨遊天地任我行
    • 野兔村
    • 阿文兄A日誌
    第五屆部落客百傑 第五屆部落客百傑 第五屆部落客百傑



    GetRank - Webmaster and Seo Tools
  • 分類
    • Android
    • ASP
    • BU幣任務區
    • C#
    • CentOS
    • CGI
    • CompScience
    • C_and_CPP
    • Database
    • DB2
    • debian
    • Featured
    • In Search of Stupidity
    • Information Architecture for the World Wide Web
    • j2me
    • java
    • JavaScript
    • JavaScript權威指南:ECMAScript5 + HTML5 DOM + HTML5 BOM 範例精粹
    • Languages
    • lds
    • Linux
    • LinuxDev
    • MSSQL
    • MySQL
    • NetSecurity
    • Office
    • Oracle
    • Palm
    • Peopleware: Productive Projects and Teams
    • perl
    • php應用
    • PostgreSQL
    • Python
    • Quality is Still Free
    • ruby
    • Solaris 系統
    • Sponsored Reviews
    • Symbian
    • System
    • THE MYTHICAL MAN-MONTH
    • The Peter Principle
    • TinyERP
    • ubuntu
    • Uncategorized
    • VBA
    • VoIP
    • Web Blog
    • weberp
    • Windows
    • windows mobile
    • Wordpress
    • xml
    • ㄚ琪走透透
    • 中壢社大河川踏查社
    • 人才庫
    • 企業ERP
    • 免費好康
    • 公司簡介
    • 口碑貼文
    • 商品推銷
    • 就業資源
    • 工作大未來
    • 工作訓練
    • 廠商簡介
    • 我攝過的教堂
    • 我的論文
    • 掌握Google關鍵字:SEO搜尋秘技全攻略
    • 數位拍古蹟
    • 文章導讀
    • 求才訊息
    • 生活與社會
    • 發燒鑑貨文
    • 直到路的盡頭
    • 神社
    • 科技通訊
    • 笑話
    • 約耳趣談軟體
    • 組合語言
    • 網站報報
    • 網站評論
    • 網路賺錢
    • 美味食記
    • 翻譯
    • 職業達人
    • 自然與科學
    • 藝術與表演
    • 觀察力培養
    • 設計模式之禪
    • 貼貼樂
    • 資料處理
    • 軟體報報
    • 閒聊
  • 最新的回應

    • 小倆口東京自由行-Day 2一日乘車券 | 工作達人(Job Da Ren) 在 小倆口東京自由行-Day 2明治神宮
    • Washer Parts - Our site provides essential information on ge appliance parts - Ge Appliance Parts 在 Whirlpool Appliance Parts
    • ㄚ琪 在 四月連結Fun Taiwan送好市特超大附門掛衣架組
    • MESON 在 四月連結Fun Taiwan送好市特超大附門掛衣架組
    • GP 超霸充電池高電力鎳氫(NiMH)電池第十五次使用 | 工作達人(Job Da Ren) 在 GP 超霸充電池高電力鎳氫(NiMH)電池試用
    • ㄚ琪 在 webERP : WebERP 4.03.5 推出

    請幫工作達人按讚

    • Copyright c 2005 - 2009 工作達人(Job Da Ren) and is proudly powered by WordPress
    • Entries (RSS)
    • Comments (RSS)
    • Home
    • About achi
    • Archives
    • 隱私權政策
    • stock photos
    • Contact
    • Top Posts
    • Poll
    • wp-buzz
    • Advertise
    ss_blog_claim=fec8047405cd9a7a8d8d623b47b39edf
    Creative Commons Attribution-NonCommercial-ShareAlike 2.5 台灣
    This work by ㄚ琪 is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 台灣.

    无觅相关文章插件,快速提升流量