c++學習筆記=>萬丈高樓平地起=>ex1:Hello,World!

c++學習筆記=>萬丈高樓平地起=>ex1:Hello,World!

1.依慣例我們的第一個程式,就是利用c++寫一個輸出”Hello, World!”的簡單程式。

2.打開Microsoft Visual Studio 2005,點選功能表上檔案/新增專案,建立1個c++語言 win32主控台的專案

image

image

ex224

ex229

3.Microsoft Visual Studio 2005的精靈會依我們的選擇建立一個win32主控臺程式的基本架構。從方案總管的視窗我們可以看到下圖的檔案架構,在這個圖示中可以看到,Microsoft Visual Studio 2005的精靈自動建立三種類型的檔案分類:原始程式檔(.cpp)、標頭檔(.h)、資源檔。以下就這三種類型作簡單說明。

image

4.標頭檔(.h):各種程式語言的發展都一樣,都是從簡單到複雜,簡單的時期尚可能一切程式碼自己來,到了複雜階段就要眾人的分工,如何將眾人各自分工的成果方便提供他人應用且便於修改維護,c與c++就採取標頭檔這種方式,像ex1範例專案中stdafx.h這個檔案就是這個專案程式主要的標頭檔,簡單的說標頭檔像是圖書館的目錄索引一樣,我們需要某些參考書籍,可以透過這個索引可以找到我們要的書籍資料,而不需要將圖書館所有的書都搬出來。標頭檔可以告訴編譯器去找到程式中所要用的程式碼,這樣程式撰寫不需要重複寫入相同的程式碼,標頭檔通常和原始程式檔配合,每個原始程式檔通常會有一個相對應的標頭檔,標頭檔內通常含有函式、變數其他識別符號的前置宣告或定義。更詳細的說明可以參考維基百科上的解釋。

5.原始程式檔(.cpp):主要的程式內容所在。ex1這個專案有兩個原始程式檔;stdafx.cpp與ex1.cpp

打開stdafx.cpp這個檔案會發現只有以下的內容

// stdafx.cpp : 僅包含標準 Include 檔的原始程式檔
// ex1.pch 會成為先行編譯標頭檔
// stdafx.obj 會包含先行編譯型別資訊

#include "stdafx.h"

// TODO: 在 STDAFX.H 中參考您需要的任何其他標頭,
// 而不要在這個檔案中參考

 

 

 

每行的開頭如果有//這個標記,代表這一行的內容是程式註解,在編譯器編譯的過程會跳過,如果要多行註解可用/*與*/,將要註解的內容包括在內。

所以在stdafx.cpp 這檔中其實只有一行 #include "stdafx.h"  ,#include這個是編譯指令,告訴編譯器stdafx.cpp這個檔案有引用"stdafx.h" 這個檔案的內容。

stdafx.h這個檔案的內容如下,其中#include <stdio.h>    所引用的stdio.h是與標準輸出入相關的函式都在這標頭檔中定義:

// stdafx.h : 可在此標頭檔中包含標準的系統 Include 檔,
// 或是經常使用卻很少變更的
// 專案專用 Include 檔案
//

#pragma once

#ifndef _WIN32_WINNT        // 允許使用 Windows XP (含) 以後版本的特定功能。
#define _WIN32_WINNT 0x0501    // 將它變更為針對 Windows 其他版本的適當值。
#endif                       

#include <stdio.h>    //這標頭檔我們
#include <tchar.h>

// TODO: 在此參考您的程式所需要的其他標頭

 

 

 

 

stdafx.cpp 這檔案看起來好像沒甚麼用,如果沒有這個檔案會如何?試試看如果把這個檔案移出專案,進行編譯會有甚麼狀況?會出現以下的錯誤訊息。
image
這錯誤的起因是因為Microsoft Visual C++ 2005為了加速程式的編譯,Microsoft Visual C++ 2005的精靈會預設『使用先行編譯標頭檔』。在專案第一次進行編譯時會執行先行編譯標頭檔的程序(在專案屬性中可找到該設定)產生所謂的先行編譯標頭 (.PCH) 檔。這個程序的目的有助於加速編譯程式檔案,如果專案某些檔案在專案中不會異動(如一些系統提供的標頭檔stdio.h、tchar.h…等等),則不用每次編譯專案都重新編譯一次,直接引用先行編譯標頭 (.PCH) 檔。所以stdafx.cpp 這個檔案的目的主要是為了告訴編譯器產生先行編譯標頭 (.PCH) 檔。

ex1.cpp這個與專案同名的原始程式檔,是程式進入點所在(_tmain等同於main),也就是一個程式開始執行的位置;_tmain是一個函式,甚麼是函式?簡單的說就是為了達到某些功能;例如計算學生成績總平均,我們把可以達成這個功能的程式碼寫在一個獨立的區塊,然後用一個名字代表這個區塊,每次要使用計算學生成績總平均,只要在程式中寫入這個函式的名字,即可代替整個程式碼區塊。函式除了名稱之外,尚包括回傳值型態、參數列、與函式主體部分(大括號{}所包括的範圍)以下程式碼為例

image

C或C++的程式都是由一個特殊的函式開始執行,這個特殊的函式通常命名為main,在使用unicode字元集下改用wmain代替main,但這裡為什麼會用_tmain,原因是為了方便在unicode與非unicode中切換,vc中已經定義一個巨集(在tchar.h這個標頭檔中定義,所以如果不#include這個檔,將會產生錯誤),以_tmain取代main與wmain,在進行編譯時這個巨集會自動依照選擇的字集切換main或wmain。

// ex1.cpp : 定義主控台應用程式的進入點。
//

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
        return 0;
}

 

 

 

 

這個檔案一樣也引用這標頭檔"stdafx.h"

我們在這大括號中return 0;這行前加入

printf(“Hello, World!”);記得要在句尾加入分號(;)表示一行程式的終止。

// printf這個函式可以將字串輸出至螢幕 ,可以在stdio.h這個標頭檔找到它的定義
// int printf(
//   const char *format [,
//      argument]...
//);

// ex1.cpp : 定義主控台應用程式的進入點。
//

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{

printf(“Hello, World!”);

return 0;
}

 

 

 

 

 

 

image

 

執行Microsoft Visual C++ 2005 建置/編譯,我們的第一個程式就完成了!

在debug資料夾中我們會看到

image

其中ex1.exe就是我們要的,為了方便看到執行結果,我們用記事本程式寫一個文字檔存成window的批次檔(副檔名為.bat)

image

我們把它存在debug這個目錄與ex1.exe一起,在視窗下用滑鼠點兩下執行這個do.bat批次檔,即可看我們第1個向世界問好的程式的執行結果!

image

 

6.第三種檔案類型為資源檔,包括程式會用到的各種文字資料、圖片、圖示(ICON、或滑鼠游標)、註冊機碼、視窗對話盒等。這些在視窗程式設計會經常使用。

cool      歡迎引用,請注明來源出處!

作者:楊煥謀