程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C/C++語言入門篇-- HelloWorld思考 .

C/C++語言入門篇-- HelloWorld思考 .

編輯:C++入門知識

第一篇文章終於落筆了,本文將從思考的角度去重新認識一下Helloworld。在例子之後會提出不同的問題,引導大家去思考每一句乃至每個細節。同時希望能夠讓大家以後能夠以不斷思考不斷提問的方式去看待自己的程序。我相信大家會發現很多新的東西,好了切入正題。
 
我們每學一種新的語言基本都會從helloworld開始,基本每種語言都喜歡將helloworld作為示例直接的表現在讀者的面前,讓讀者在感官上認識一下這種語言的結構,語法格式等。因此各種各樣的helloworld便出來了,比如:WINDOWS程序的HelloWorld,操作系統的Helloworld(簡單的獨立於OS的一個引導及打印helloworld字樣),LUA的HelloWorld(游戲開發常用腳本語言)等等數不勝數。今天我們就從CC++的helloworld進行探討。首先寫倆例子:
C語言版:
#include <stdio.h>
int main( void )
{
     printf( "Hello World!" );
     return 0;
}
 
C++版:
#include <iostream>
using namespace std;
int main( void )
{
     cout << "Hello World!" << endl;
     return 0;
}
 
首先,請大家糾正自己的編碼格式,保持每行基本都有獨立的事情,不要寫成這樣:
#include <stdio.h>
main()
{ printf( "Hello World!" );
     return 0;}
這樣一來,假如是上百萬行代碼的項目,我想你也不想看自己寫的代碼,編碼習慣好對自己調試及糾錯都有好處,在大型的項目中都是分工合作的,假如你的代碼格式很差將對別人的工作量造成影響。你在項目中的地位也將受到影響,最直接的就是影響到你的薪資。
 
其次,我們先看C語言版的,這是一個最簡單的程序,就只有一句打印。輸出的內容就是Hello World!我相信大家都知道。那我現在在這裡提幾個問題:
1. main函數是否一定得有返回值?
2. main函數是否可以有參數?
3. 為什麼是return 0?
4. 為什麼要引用stdio.h頭文件? 自己是否可以寫頭文件?
5. printf是否可以有多個參數?假如能,為什麼能有多個? 是怎麼實現的?我們可否自己寫一個?
6. printf是通過什麼形式將"Hello World!"字符串傳入的?
7. #include <stdio.h>可否替換成#include "stdio.h" ?
好了,暫時提出這幾個問題。大家可以看到,簡簡單單的HelloWorld程序也能提出這麼多問題,是不是用思考的方式去看待程序將收獲不少?我們再來一一回答這些問題:
1. main函數可以不寫返回值,比如:void main(){} 甚至 main(){}。 不過不推薦前面兩種形式。原因在於,main函數的返回值為0表示執行完整個main函數沒有問題,成功返回。同時在main函數的上一層調用將會取到main函數的返回值,進行一些系統的處理(這裡暫時不詳解)。看似沒必要的東西通常被我們忽略。作為程序員的我們,我想應該在做事的時候要有追求完美的觀念。因此main函數建議寫上返回值。
2. main函數可以有參數。比如:int main( int _Argc, char** _Argv, char ** _Env ); _Argc 是指命令行輸入參數的個數,_Argv存儲了所有的命令行參數。_Env表示環境相關。同時也可以定義成:int main( int _Argc, char** _Argv ); 比如:
你的程序是hello.exe。傳命令行參數:
hello.exe Shiqi Yu
那麼,_Argc的值是 3,_Argv[0]是"hello.exe",_Argv[1]是"Shiqi",_Argv[2]是"Yu"。 _Env[0]就是你當前管理員賬戶所擁有的文件夾路徑,可以調試的時候觀察(在後面的文章裡專門講調試技巧相關)。這裡有指針及字符串數組。以後再給大家深入解釋。
3. 返回0表示程序正常退出。
4. 引用stdio.h是為了調用printf函數。此函數聲明在這個頭文件裡。
5. 這個問題留給大家思考。
6. 這個問題也留給大家思考。
7. 可以替換,我們在編譯程序的時候,編譯器會自動去查找你所引用的這些頭文件。<>表示優先從系統的庫裡面查找此頭文件,未找到再到用戶代碼目錄裡查找。""剛好相反。
還有更多的問題或者疑問,大家可以繼續去想,首先養成了思考的習慣。進步就很快了。
 
再看C++版的,也是一個簡單的例子,同樣是打印一句Hello World!再提出幾個問題:
1. #include <iostream>為什麼沒有.h?
2. using namespace std;這句為什麼?作用是什麼?
3. 這裡的Hello World!字符串又是怎麼傳入函數的?還是並沒有傳入函數?
4. cout在這裡起什麼作用? <<又起什麼作用?
5. endl起什麼作用?
C++跟C的語法相差不大,這裡只提出了5個問題,相同的可以提出的問題已經在C語言版裡提出了。兩個版本有的問題同時有效。再來答這幾個問題:
1. 在VC6以後的C++版本,VC的庫目錄裡增加了一些新的頭文件,這些頭文件沒有擴展名(分類一多,為了區分(各人認為))。因此就沒有.h了。
2. 這裡是名字空間的引用,名字空間也就是為了防止在不同的CPP或者H中發現同名字的函數,為了區分,就在這些函數或者類等外面加上一個名字空間以示區分,假如沒有這句,下面的語句將得這樣寫:
std::cout << "Hello World!" << std::endl; 假如在另外一個名字空間masefee裡面同樣有同名字的函數,我們就得寫:masefee::cout << "Hello World!" << masefee::endl;了。
3. 這個問題在解決了上面C語言版的問題6自然會解答了。
4.cout其實是ostream,也就是輸出流。<<就是重載運算符,通過傳參數的形式將需要輸出的內容傳入<<運算符裡。然後進行輸出。
5.endl就是回車符。換行用。
 
好了,這兩個程序解答完了,相信大家已經有感覺了。思考真的會帶來無限的收獲。也希望大家有新的發現及想法,並告訴給我。讓我們共同進步!
除了上面兩個紅色的問題,另外再提出幾個問題:
1. C++中的重載是什麼意思?
2. C++中怎麼重載運算符?
3. 了解下編譯器的堆棧調用窗口。
4. 怎麼在編譯器裡面設置給程序傳命令行參數?命令行參數在實際中有什麼運用?
 
好了。這些問題會在大家回復之後,在怪獸群裡密我。我會逐一解答。同時在文章數量及問題數量累計到一定數目的時候,統一進行解答。這樣做也是為了能夠監督一下大家。嘿嘿!望理解!歡迎大牛拍磚。。

作者“Tony的技術分享”

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved