基本上每門語言都是用"helloworld"做爲她的第一講,C語言也不例外。程序員
傳統的教材都是讓你安裝一種IDE集成環境,而後照例子敲入代碼,按下ctrl+r之類的運行程序,感覺一下運行的結果。HelloWorld程序以下:shell
#include <stdlib.h> #include <stdio.h> void main() { printf("Hello World\n"); }
[zhoukai@zhoukai-MBPR:tmp]$HelloWorld
#include<stdlib.h>
這樣的語句進行預處理生成最終的代碼源文件,而後編譯成與特定類型的操做系統相關的目標代碼,這個目標代碼其實能夠在只要與當時生產的操做系統類型相同的操做系統中重複使用的,而後是連接成目標文件,這個文件大多數也能夠在相同的操做系統中直接使用,可是因爲有的程序會依賴特定的庫,因此出表現出不能運行成功的狀況罷了。好比剛纔的helloworld程序在類Unix系統中,使用以下操做生成可執行文件:[zhoukai@zhoukai-MBPR:tmp]$gcc main.c
而後是運行:vim
[zhoukai@zhoukai-MBPR:tmp]$./a.out [zhoukai@zhoukai-MBPR:tmp]$HelloWorld
能夠執行環境就是開啓一個終端程序,而後./a.out
運行。編輯器
守則一:一個負責的程序員編寫程序要考慮可移植性函數
int main(int argc, const char *argv[]) { ... }
其中的形式參數的做用就是接收運行時傳入的命令參數,後面咱們會討論到。操作系統
###使用全局複用調試
全局變量基本是沒種語言都支持的,即爲全局,便是對全部人可見code
有一天你的老闆說,如今咱們生意很差,咱們要改程序輸出的內容,發發牢騷,而不是友好的問候。偏偏這要交給你來作,並且當時沒有使用任何全局變量或着宏來代替這些輸出內容,並且涉及的幾十個文件多是零零散散的分佈在好幾百個位置中,那麼恭喜你,即便使用多文件文本替換也是挺麻煩的事,並且你老是要修改好幾十個文件。若是當時使用全局變量也很好用修改的。開發
extern char g_SayHello[];
char g_SayHello[] = "Kick the bucket!";
... #include "utils.h" ... int main(int argc, const char *argv[]) { printf("%s\n", g_SayHello); return EXIT_SUCCESS; }
[zhoukai@zhoukai-MBPR:tmp]$ gcc main_helloworld.c utils.c [zhoukai@zhoukai-MBPR:tmp]$ ./a.out Kick the bucket! [zhoukai@zhoukai-MBPR:tmp]$
###使用宏複用編譯器
宏是c語言強有力的特性之一,不使用宏,你會作不少不討喜的工做,可是濫用宏也會不討喜,全部任何東西都有利有弊。就像沒有壞人,就體現不出好人;沒有細菌這樣的微生物,滿世界都是屍體同樣。這個是一個哲學問題〜〜〜
//稍做解釋,下面的宏定義是關聯預編譯條件宏使用,即若是沒有定義宏,則定一個默認的宏 #ifndef SAY_HELLO #define SAY_HELLO "Kick the bucket!" #endif
int main(int argc, const char *argv[]) { printf("%s\n", SAY_HELLO); return EXIT_SUCCESS; }
[zhoukai@zhoukai-MBPR:tmp]$ gcc main_helloworld.c utils.c -DSAY_HELLO=\"Drop\ dead\!\" -o a.out [zhoukai@zhoukai-MBPR:tmp]$ gcc main_helloworld.c utils.c -DSAY_HELLO=\"Go\ to\ hell\!\" -o ab.out [zhoukai@zhoukai-MBPR:tmp]$ gcc main_helloworld.c utils.c -DSAY_HELLO=\"Damn\ you\!\" -o abc.out [zhoukai@zhoukai-MBPR:tmp]$ ./a.out Drop dead! [zhoukai@zhoukai-MBPR:tmp]$ ./ab.out Go to hell! [zhoukai@zhoukai-MBPR:tmp]$ ./abc.out Damn you! [zhoukai@zhoukai-MBPR:tmp]$
稍做解釋,gcc最簡單的使用就是
gcc <源文件名>
,而後就會生成默認的程序文件a.out,可是通常都但願又一個自定義的程序文件名,因此加上選項參數-o <目標名>
;在不加-c <源文件名>
的狀況下都是直接完成三部曲,生成可執行文件的;其它還有不少可選的參數,後面慢慢說。
爲何要寫這麼多,其實也不是高深的代碼。目的就是一個,你在編寫代碼的時候是否比別人多想了一步呢?是否考慮過代碼的可移植性呢?是否考慮過代碼的可複用性呢?是否考慮過代碼的可維護性呢?這些!都是一名合格的程序員應該考慮的問題。