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