Jump to content

တဲမ်းပရိုဂရမ် တွမ်ႏ C/ သေငါꩻအီ

From Wikiversity
Tình trạng hoàn thành: học liệu này đã đạt đến mức hoàn thành.

အွောန်ႏထော့လွေꩻ

[edit]
  • သေနာႏလွေꩻ သော့ဝဲးတွမ်ႏ ဟာဒ်ဝဲး ကဗွိုန်ပီတောဝ်းဝင်ꩻ
  • သေနာႏအီ ကုမ်ပျူတာ မာစွို့ꩻလွေꩻ သော့ဝဲး
  • သေနာႏအီ compiling တွမ်ႏ compiler ထာꩻယူႏခွေါန်ꩻ
  • ရဲန်ꩻတဲမ်းထွူ compile ဖေႏ C ပရိုဂရမ်
  • ထူႏဒဲ့ꩻ C စေဖြေႏခရာႏဆေ့ꩻဆေ့ꩻ၊ မာꩻလွေꩻနာꩻတာႏ အရီးသွတ်ꩻ C ပရိုဂရမ်ထွူ အွောန်ႏလေပ်ချာအီ


သွောန်ခန်ꩻလိတ်

[edit]

ဟာဒ်ဝဲး တွမ်ႏ သော့ဖ်ဝဲး

[edit]
The Personal Computer (PC)
1. မိုနီတာ
2. အဓိက ဘောဒ်ပျာႏ
3. CPU (မုဲက်ခရို ပရိုသဲက်သာ)
4. အဓိက မတ်တောင်ꩻအီထာꩻ (RAM)
5. ကာဒ် ဒွါးသော့ꩻအီ
6. ယူနစ် ပသာဖေႏ တျာႏအာႏ
7. အထန်ႏဖဲ့ꩻ ထာꩻပျာႏတဝွိုန်ꩻ
8. ထာꩻပျာႏတဝွိုန်ꩻ အဆွော့ꩻ (HDD)
9. ကီးဘောဒ်
10. ယူးပေႏ


ကဗွိုန်ပီတောဝ်းတွမ်ႏ ဟာဒ်ဝဲးနောဝ်ꩻ သော့ဝဲးယို ကေားမာꩻအီသား ပွိုင်စမ်ႏချာဒျာႏသွူးသွူး လꩻတောဝ်းသွူ။ သော့ဝဲးကအီးရုဲင်ꩻ လွေꩻသဲင်ꩻသော့ချာငါအီထာꩻတာႏ လိုꩻမာꩻအီသား မာꩻအီဗာႏနေးတွမ်ႏ ကုမ်ပျူတာ ကဉ်းအာအာ။ ကုမ်ပျူတာ သစ်သတဲမ် ယူနစ် (System Unit) တဗာႏကို CPU (အုံအကဲန် ဗာႏစေရဲန်ꩻဖေႏထာꩻ)၊ မိုနီတာ ထီႏအီထာꩻ၊ ကီးဘောဒ်တွမ်ႏ ယူးပေႏ mouse ဖုံႏ အောဝ်ႏပါသော့သွူ။ CPU နောဝ်ꩻ မာꩻဖေႏ ကလိုႏတွက်စေထာꩻလို့လို့၊ ကုမ်ပျူတာတဖြုံႏကို ထွာအဓိက ထာꩻခြိုꩻတဗာႏသွူ။ CPU မဉ်ႏတပါတောဝ်းနောဝ်ꩻ ကုမ်ပျူတာယို တွူႏဖေႏထာꩻ အီးဒါႏမျိုꩻမွေးတောဝ်း။ မိုနီတာနောဝ်ꩻ အွောန်ႏနယ်ဖေႏအီ ဂရပ်ဖစ် ထာꩻပျာႏလောင်း၊ ထွာနေး မာအီသား ထီႏလွောန်ꩻယိုꩻယိုꩻထာꩻတာႏသွူ။ မိုနီတာ မာꩻနမ်း ဗာႏထေနယ်ထာꩻ ကီးဘောဒ်တွမ်ႏ ယူးပေႏနောဝ်ꩻ အွောန်ႏဖေႏ ကေားမာꩻအီသား တောမ်သော့ꩻလိတ်တာႏ။ ထာꩻမာꩻအာဗာႏဖုံႏတာႏ ကောပ် လွောန်းသော့ꩻလိတ် ကုမ်ပျူတာကို တွမ်ႏကီးဘောဒ် ယင်း ယူးပေႏ (mouse) တဲင် နာꩻအီးလꩻချာ ကုမ်ပျူတာ ကအီးရဲန်ꩻပွိုင်ဖေႏဖုံႏ။ ကအီးမာꩻထာꩻမာꩻတာႏ ကုမ်ပျူတာ မာꩻအီလို့လို့ဗာႏ ထာꩻခြွိုင်းကီယိုဖုံႏသွူ။ ထာꩻကတွူႏဖေႏ ကုမ်ပျူတာနောဝ်ꩻ ထွာ ထာꩻခြွိုင်းကဟဲ့ꩻဒါႏ ဟာဒ်ဝဲး ကီယိုစားဖုံႏခြေင်ခြေင်မွေးတောဝ်း၊ လိုႏသော့ꩻဖေႏပါက အသꩻ၊ အထာꩻသေ။ ထာꩻကအွောန်ႏ ကုမ်ပျူတာ သူႏသေအီထာꩻတာႏ၊ မာꩻဖေႏဒါႏထာꩻမာꩻတာႏနောဝ်ꩻ ဟဲ့ꩻသော့ဖ်ဝဲးသွူ။

CPU နောဝ်ꩻ အတွက်စေဖေႏ၊ အမာꩻစွို့ꩻဖေႏ သော့ဝဲး။ သော့ဝဲးယို မာꩻခါꩻတွမ်ႏ CPU ကမာꩻစွို့ꩻဖေႏအီဒါႏဒါႏ ထာꩻထွန်ႏခါꩻနေးဖုံႏသွူ။ CPU တဗာႏတွမ်ႏတဗာႏ ဗွိုန်ပီတောဝ်းဝင်ꩻဖုံႏတဲင် နီထွားညာꩻယော့လွောန်ꩻ ထာꩻကထွန်ႏခါꩻနေးဖုံႏခရာႏတဲ့ လိုႏတောဝ်း။ အောဝ်ႏလိုႏသေသေꩻခါꩻဒျာႏ ထာꩻကထွန်ႏခါꩻ (instructions) ဖုံႏသွူ။ ယိုခါလဲင်ႏ ကသေလဲန်းဝင်ꩻနောဝ်ꩻ နီမဉ်ႏမဉ်ထွောန်ႏမာꩻထာꩻမာꩻ တောမ်ႏကုမ်ပျူတာနောဝ်ꩻ နီအောဝ်ႏလိုႏထူႏလꩻခါꩻရီး ထာꩻကထွန်ႏခါꩻဖုံႏ။ နုဲင်းမုဲင်ꩻစားတန်နဲး? နီတဲမ်းလွေꩻရိုႏရိုႏနေးထွူ ကြုဲင်းလွေꩻဖေႏ လိတ်စားနောဝ်ꩻ အွိုး ကမာꩻစွို့ꩻဖေႏဒါႏ ကိုဒ် CPU ကမာꩻအီကို။ တောင်ꩻတောင်ꩻလွေꩻ ကုမ်ပျူတာ ပရိုဂရမ်တဗာႏယို ထွာ ထာꩻကထွန်ႏခါꩻဒါႏ ကအွောန်ႏထော့ဖေႏ ကအီးမာꩻထွာဖေႏ ထာꩻမာꩻအဗူႏတဗာႏ နောဝ်ꩻ။

ကမာꩻစွို့ꩻဖေႏ ပရိုဂရမ်

[edit]

မဲက်ဆဉ်ကိုဒ်ယို ထွာ ကုမ်ပျူတာသီး ကသေနာႏဒါႏ ဘာႏသာႏငေါဝ်းသွူ။ ယဟန်ႏသားရိုꩻ လိုꩻသီးအရန်းဖုံႏနောဝ်ꩻ ဖတ်ထွားလိတ်နောဝ်ꩻစား ဒါႏတောဝ်းတဲ့။ ကွဲးတွော့ꩻ ကမာꩻနုဲင်းဖိုသားတာႏနောဝ်ꩻ ထွာ ဒစ်စစ်တယ် ကဗျာတဗာႏသွူ။ မဉ်းထွားချာသဲင်ꩻ ကုမ်ပျူတာသိပ္ပံ ကအောဝ်ႏစစခါယို ပရိုဂရမ်ဖုံႏ ကားကအောဝ်ႏနောဝ်ꩻ တဲမ်းခါꩻနေးတွမ်ႏ မဲက်ဆဉ်ကိုဒ်။ ခါးလား သခရဉ်ထာꩻပျာႏ ထီႏအီထာꩻ တွမ်ႏ ပရဉ်တာဖုံႏကအောဝ်ႏခါနောဝ်ꩻ ပရိုဂရမ်တဲမ်းသားဖုံႏ မာꩻတွမ်ႏထာꩻခြွိုင်း အောဝ်ႏအထန်ႏ ဒွါႏသော့ꩻစား ပီနုဲင်း ကာဒ်အအိုသား ယင်း သဝစ်ဆျ်ထာꩻကြဲ့ (punch cards and switches) ဖုံႏတွော့ꩻ ရဲန်ꩻတဲမ်းသော့ꩻ ကမဉ်ထွန်ႏဒါႏထာꩻထွူ အွောန်ႏဒွါႏသော့ꩻဖေႏဗာႏ ကုမ်ပျူတာကိုသွူ။ ကတဲမ်းဒါႏ ပရိုဂရမ် ယိုတစားနောဝ်ꩻ ယွိုးမွေးထာꩻ၊ အထုင်ꩻထဲင်ꩻလွေꩻဒါႏ အမဲန်ႏတောဝ်းဖဲ့ꩻ။ မဉ်ႏမာꩻစွို့ꩻလွေꩻ ပရိုဂရမ်တဗာႏနောဝ်ꩻ ကုမ်ပျူတာ ဖတ်လွူꩻထွားဖေႏ ကထုမ်ႏခါꩻဒါႏ ထာꩻတဗာႏစီႏထွူ တေင်းမာꩻလွေꩻ ထာꩻကရော့ꩻတောမ်ႏ ထာꩻကထွန်ႏခါꩻ နောဝ်ꩻဗာႏ။ ကောပ်စွောန်ႏ ကုမ်ပျူတာ တဖြုံႏစီႏကို ကအောဝ်ႏပါဒါႏ ထာꩻကထွန်ႏခါꩻဆေ့ꩻအာ ယင်း အခွိုꩻဖုံႏ ဗွိုန်ပီတောဝ်းဝင်ꩻနောဝ်ꩻမꩻ နီသွေောန်းသီး ခြုဲင်းနယ်ဖေႏအာထဲင်းဒုမ် ယိုဖဲ့ꩻ။ အဓိက ကမဉ်ဖေႏသေခါꩻနောဝ်ꩻ မဉ်းတဲမ်းမာꩻကိုဒ် တနီꩻခါ ယမ်သေနာႏလွေꩻ C အစွန်ꩻ ကာႏချာငါဒါႏ ပလဲတ်ဖောမ်း ထာꩻရွဲꩻနောဝ်ꩻဒျာႏသွူ။ ထာꩻယိုနောဝ်ꩻ ထွာ ထာကြဲ့ C ကအောဝ်ႏတဉ်ႏကြွော့အီထာꩻသွူ။

Compiling and Compiler (ကုမ်ပုဲင်လဉ်း တွမ်ႏ ကုမ်ပုဲင်လာ)

[edit]

မဲက်ဆဉ်ကိုဒ်ယို ထွာ အထျꩻထျꩻတောမ်ႏ ကုမ်ပျူတာ ကမာꩻစွို့ꩻဒါႏဖေႏအီဒါႏ ထာꩻထွန်ႏခါꩻသေꩻဖုံႏ အဗူႏတဗာႏသွူ။ အွောန်ႏသေးဟောဝ်အီ ထာꩻသေခရာႏတာႏနောဝ်ꩻ ကုမ်ပျူတာ မာꩻအီတွမ်ႏ ဘုဲင်နရီ ဂဏန်ꩻထာꩻရဲန်ꩻ။ ဂဏန်ꩻတဖြုံႏဖြုံႏယို ကုဲင်းထွာဒါႏ ၁ တောဝ်းလဲ့ ၀(သုည)၊ အမဉ်ရိုꩻလွေꩻ အဗွောင် တွမ်ႏ အပေ့ꩻ။ အဟောဝ်နောဝ်ꩻ တဲမ်းတသာ ပရိုဂရမ် အွိုးတစားခေါ် နွို့အုံလꩻတေား မဲက်ဆဉ်ကိုဒ် ခင်ႏလမ်းကို၊ ဟဲ့ꩻမဉ်ꩻခါꩻ အဲက်သဲမ်ဘလီ။ ရိုꩻစွောန်ႏ မဉ်ႏတဲမ်းဘုဲင်နရီနေးနောဝ်ꩻ စွို့ꩻတနꩻဒျာႏလဲ့ အဲတ်သဲမ်ဘလီကို အယမ်အောဝ်ႏနေနေ၊ မာꩻလို့ဆေ့ꩻဖေႏ အခိန်ႏ ကရသောꩻထိုꩻ။ တဲမ်းကိုဒ် တွမ်ႏ အဲတ်သဲမ်ဘလီယို ယွိုးယွ၊ အထုင်ꩻထဲင်ꩻလွေꩻဒါႏ အမဲန်ႏတောဝ်းဖဲ့ꩻ။ အောဝ်ႏနောဝ်ꩻထွူ အရန်းထို ဘာႏသာႏတဲမ်းပရိုဂရမ် အောဝ်ႏလွောန်အီ။ ထာꩻယိုစား မာꩻယိုꩻဖေႏ ကေားတဲမ်းပရိုဂရမ်သားထာꩻမာꩻ၊ မာꩻလꩻဗွေအီ ထွူမွိုင်အီ ကတဲမ်းဒါႏ ပရိုဂရမ်ဖုံႏ။ ဘာႏသာႏယိုစားဖုံႏကို ယဟန်ႏနောဝ်ꩻ အကြုဲင်းသဲင်ꩻချာဖေႏ အဲတ်သဲမ်ဘလီ၊ အောဝ်ႏသွောန်ငါငါမဲ့ꩻ အီးလွောန်ပါဒျာႏ။ တဗွိုန်ပီတောဝ်း ဘာႏသာႏတဲမ်းပရိုဂရမ် လောင်းလင်ဖုံႏနောဝ်ꩻ C ယို အကြုဲင်းဖေႏတေား ဝွေꩻကိုဒ် အဲတ်သဲမ်ဘလီနေးထွူ မာꩻဖေႏ ဖုဲန်တသာ ကုမ်ပျုတာ အီးမာꩻစွို့ꩻသော့ꩻဖေႏတာႏသွူ။ Compiler ယို ထွာ သော့ဝဲး အကွို့ꩻတဗာႏ၊ ထူႏဖုဲန်ဖုံႏ (ယိုကိုနောဝ်ꩻ ထွာ C ကိုဒ်)ထွူ ကြုဲင်းလွေꩻဖေႏဖုဲန် အီးမာꩻစွို့ꩻအီ ကုမ်ပျူတာကိုတာႏ။ အောဝ်ႏလိုႏတောင်ꩻခါꩻနောဝ်ꩻ ဘာႏသာႏလို့လို့ယို compile ဖေႏနေးတောဝ်း၊ ယဟန်ႏနောဝ်ꩻ အပြန်ႏတေားဖေႏနေး (ကိုဒ်မာꩻစွို့ꩻတရဲန်ႏထွူ အွောန်ႏနယ်ဖေႏချာသွူး တရဲန်ႏစား)၊ ယဟန်ႏနောဝ်ꩻ မာꩻတောမ်ႏ bit code တောဝ်းလဲ့ bytecode ကြူရောꩻနေးဝင်ꩻ။ ကုမ်ပုဲင်လာတဗာႏ ကထေဖေႏ ကမာꩻစွို့အီဒါႏဖုဲန်နောဝ်ꩻ ထွာ ဘာႏသာႏ ဝင်ꩻကဟဲ့ꩻ မဲက်ဆဉ်ကိုဒ်၊ ကဉ်းအာအာနောဝ်ꩻ ကုမ်ပုဲင်လာတဗာႏကယ်ႏကယ်ႏ အောဝ်ႏအခါႏ ကြုဲင်းလွေꩻဖေႏကိုဒ် အဲတ်သဲမ်ဘလီကို အမာꩻတွိုႏသꩻဖေႏအီ ဝင်ꩻ (အမာꩻမွိုင်ခြာဖေႏအီ၊ ယမ်ဖေႏနေး ကထူႏဆေ့ꩻသော့ꩻခင်ႏလမ်း RAM ကို)။

သေနာႏအီ C

[edit]

C ယို ယူႏလွဝင်ꩻ မဲက်ဆဉ်ကိုဒ် (machine code) တွမ်ႏ အဲတ်သဲမ်ဘလီ ဘာႏသာႏငေါင်း (assembly language) မဉ်းထွူနောဝ်ꩻ ထွာ အဖွိုႏသွတ်ꩻ ဘာႏသာႏတဲမ်းအီ ပရိုဂရမ်သွူ။ ကမဉ်ဒေါ့ꩻနောဝ်ꩻ C ယို ထိုꩻလဲန်းလွေꩻ ထာꩻမာꩻ မာꩻဗာႏစွို့ꩻစွို့စွောန်ႏစွောန်ႏ၊ ဘာႏသာႏကို ကမာအီဒါႏ လော့စေက်နောဝ်ꩻ အဗွိုန်ပီ ကုမ်ပျူတာ ကမာꩻထာꩻသွူ။ ထာꩻယိုနောဝ်ꩻ ဗွိုန်ပီတောဝ်းတွမ်ႏ အရန်းထို ဘာႏသာႏ(high level language) ဖုံႏ အွိုးခုမ်စမ်ႏလိတ်ရဲန်ႏ ကရလိုႏထွာ လွိုက်ခရာႏ တဗာႏကို၊ C ကို ကအီးခုမ်စမ်ႏရော့ꩻရော့ꩻ ဒေတာတာႏ နာꩻလွိုက်မာꩻဗာႏစွို့ꩻစွိုꩻ ထာꩻမာꩻ အွိုးကုမ်ပျူတာ ထာꩻတောင်ꩻခါꩻ မီမိုရီခင်ႏလမ်းအုံ (memory address) တရွဲꩻကိုသွူ။ လိုꩻတဖြာꩻတာႏ ထာꩻယို ကုဲင်းမာꩻဖေႏသေဒါးထာꩻဖုံႏ ဆေ့ꩻဆေ့ꩻအာအာ။ ကောပ် ဒေတာအစားစားတဲင် ယလဲင်ႏလဲင်ႏ နာꩻကုဲင်းလꩻလော်လယ်ဒါႏ ထာꩻထွာ (results) ဖုံႏ၊ ယလဲင်ႏလဲင်ႏနောဝ်ꩻ အစေမာꩻ ယိုꩻယိုꩻဖေႏဒါႏလိုꩻသွူ။ မဉ်ႏဒေါ့ꩻယိုꩻယိုꩻနောဝ်ꩻ ကအီးမာꩻမဲန်ႏမဲန်ႏထာꩻ ပဉ်ဗာႏဗာႏတာႏ နာꩻမဲ့ ကွင်စွော့ꩻဒါႏတွော့ꩻ C ယို အပေါင်းခုဲင်ႏဆေ့ꩻဆေ့ꩻ၊ နောဝ်ꩻမꩻ နာꩻလိုႏမာꩻတောဝ်း အန္တရယ်ႏ ကရအောဝ်ႏဒါႏ လိတ်ဖြုံႏ (syntax) အမာႏဖုံႏသွူ။ ကွဲးတွော့ꩻ သေခါꩻ၊ ထွားဒါႏခါꩻ C ယို အကျိုꩻအောဝ်ႏဗွေတန်ဒျာႏ၊ မာꩻအီတဲ့ လꩻ၊ လုဲင်ႏချာငါအီတဲ့ ယိုꩻ၊ မွိုင်တဲ့ မွိုင်မွေးတန်သွူ။

Tình trạng hoàn thành: học liệu này đã đạt đến mức hoàn thành.

Objective

[edit]
  • Understand and differentiate between hardware and software.
  • Understand how the computer executes software.
  • Understand the concept of compiling and compiler
  • Set up and compile a C program
  • Gain a small taste of C: Create your very first C program and run it


Lesson

[edit]

Hardware & Software

[edit]
The Personal Computer (PC)
1. Monitor
2. Motherboard
3. CPU (Microprocessor)
4. Main memory (RAM)
5. Expansion cards
6. Power supply unit
7. Optical disc drive
8. Hard disk drive (HDD)
9. Keyboard.
10. Mouse

A computer's system unit, also commonly known as the computer case, contains a CPU (Central Processing Unit) while it usually has a monitor, keyboard, and a mouse connected to it. The CPU does all of the the processing and is an important part of the computer. Without it, the computer wouldn't even be able to run. The monitor displays graphics on a screen, which is easy for the user to see. The monitor acts as visual output. The keyboard and the mouse act as user input. The computer uses this input for many things and you'll most likely get some kind of response because of it.

The computer uses all of this equipment to do its job. This equipment, called hardware, isn't the only thing that makes a computer run. With all of the hardware something else is still needed to bring the computer to life. The stuff that actually makes the computer do something is called software. Unlike hardware, software cannot be manipulated directly by the user. Usually, the user needs to use the computer to interact with the software.

The CPU processes the software and executes it appropriately. Software is made up of a lot of instructions which the CPU executes. We don't need to go in depth about the instructions, since they vary between CPU's. The important thing is that we know that there are instructions.

It is now understood that, if we want the computer to perform a task, we must first get the instructions first. How? We simply write them down and then turn them into executable code that the CPU can use. Just remember this, a computer program is a set of instructions (a "recipe") that defines the task to be performed.

Program Execution

[edit]

Machine code is the computer's true language. Some would call it unreadable by human standards. However, it is digital poetry to the trained. Back when computer science was still in its infancy, all programs were written in machine language. Before screens and printers existed, the programmer laboriously entered into the computer the machine code for the program and then fed each instruction via some external device, such as punch cards or switches. This task of writing programs was extremely slow and prone to errors.

When a program is executed, the computer reads each instruction and performs the task associated with that instruction. Since each computer can vary in the type and amount of instructions it has, we won't focus too much on this topic. The important thing to know is C's ability to be cross-platform when creating code. This portability was the key to C's success.

Compiling and compiler

[edit]

Machine code is basically a set of instructions that the computer can execute. Computers use binary as the format for storing information. Each number can either be a 1 or a 0; which could be represented as on and off. Thankfully, a new method of writing programs has replaced machine code; this is called assembly. Although this is pretty consistent to writing binary, assembly still gives the program some edge, leading to less wasted time. Still, coding in assembly was slow and error-prone. Higher-level programming languages started to appear. These made it easier for the programmer to write programs, efficiently and quickly. Some of these languages convert their code to assembly, which will come in handy later in the course. C, unlike a lot of new programming languages, converts its code to assembly where a new executable file is created.

A compiler is a piece of software which takes a number of files of source code (C code in this case) and converts into an executable file which you can run on your computer. Note that not every language is compiled - some are "interpreted" (read line-by-line as the code is executed), and some are a mix, using something called "bitcode" or "bytecode". The executable file produced by a compiler is in a language called machine code - normally a compiler also converts the code into assembly in-between, while trying to "optimize" it (make it faster and take up less RAM).

Understanding C

[edit]

C is widely considered the lowest-level programming language, after assembly language and machine code. What this means is that C focuses much more on operations that work out exactly as they look - the logic used in the language is very similar to what the computer does. This differs from higher-level languages where list manipulation might be an option, whereas in C, you specify exact operations over a range of computer memory addresses to manipulate data in a specific way. This can either make things more or less intuitive for a person - sometimes you get weird results due to data types, and other times it can make processes easier. Generally, however, C is viewed as being more difficult as you puzzle through the correct way to do certain things, and make sure you avoid dangerous syntax errors. However, knowing C is reward enough for the effort of learning the language - it is useful, flexible, and above all - very, very fast.

Setting up to program in C

[edit]

C compiler

[edit]

Linux or Macintosh computer has a built-in C compiler with them. Linux comes with GCC (GNU Compiler Collection - previously named GNU C Compiler), whereas MacOSX comes with Clang, a compiler that acts as a frontend to the LLVM compiler. Apple provides for MacOSX the Xcode software, but it takes up a lot of disk space, so if you don't have a lot to spare, consider alternatives. For Linux there are also plenty of environments. For both OSes, I would recommend using Sublime Text (Sublime Text 3) (note that Sublime Text doesn't allow compilation within the application itself). If you use Windows, installing a compiler can be a hassle. It is a good idea to install a development environment on Windows too - and it may come with a compiler attached to it!

The terminal

[edit]

The terminal is the main way a programmer interacts with a computer. On MacOSX, it is an app under the name "Terminal", and is also called "Terminal" on many Linux distros. On Windows, you can use "Command Prompt". Upon opening, you will see a prompt to enter a command. To enter a command, type in to the command and hit the Enter key. An important thing to take note of is the filesystem. Your computer only normally looks in the current directory for needed files. To change the current directory, you can use the cd command on MacOSX or Linux. You can use cd --help to get more info on doing this.

Compiling programs

[edit]

The way this is done will depend on how you are developing. If you are using a development environment then it may offer a way to compile within the app. However, it is impossible to cover all of this - just note that the option will normally fall under "Build" or "Compile". The command for compiling from the command line on MacOSX or Linux, however, can be covered. On Linux, simply use the gcc command, with the names of source files that are to be compiled into a single executable, and specify an output with the -o option (you should probably use a .o ending for this file on MacOSX, or .elf or .o on Linux). On MacOSX, you can use either gcc or clang to use the Clang compiler, as gcc is automatically symlinked to clang - meaning that both will actually execute Clang. The options are almost exactly the same for the two compilers, and the differences irrelevant for most purposes. It is a good idea to run the command gcc --help so that you can see a list of compiler options. You can also look online for more information.

A Taste of C

[edit]

Here is the classic Hello World program written in C.

#include <stdio.h>

int main(void)
{
    printf("Hello, World!\n");
    return 0;
}

Most, if not all, C programs have the #include macro, the most common being #include <stdio.h>. What this macro really does is tell the compiler, "Hey! Before you compile my program, just copy and paste the contents of stdio.h where I am!". This is used to include the contents of standard C libraries.

In C, code is cut up into little blocks of code called functions. Unless declared otherwise, the function main will be called first when the program starts. Don't worry about the words int and void, they are special sizes that will be discussed later. The most important thing to worry about is the curly brackets ({}); a function starts and ends with them. The printf() function is arguably the most used function in C. It is used to display formatted text.

At the heart of our program is an instruction to write "Hello, World!" (followed by a newline character "\n") to standard out, which is usually the console. So what exactly is happening here? First, we call, or invoke, the function printf(). We put the arguments we wish to pass to printf() within the parenthesis. In the code above, we only pass a single argument, the string "Hello, World!\n". What's a string? Don't worry, that and more will be explained in the following lessons.

On the next line, we have return 0. When the computer encounters return 0, it immediately exits the function, meaning nothing past it will be executed, and returns the integer 0 to the caller of the function (in this case, the OS). When a non-zero integer is returned to the OS, it is usually a sign that an error has occurred somewhere in the program.

You may have noticed the semi-colon (;) at the end of printf("Hello, World!\n") and return 0. These lines of code are called statements, and in C, statements are always terminated with a ;. If you do not terminate your statements, the computer will not know where the statement ends and the next one begins.

Try writing the source code above to a file. Save the file (remember to save it with the extension .c if you're using a plain-text editor) then compile it.

To execute/run the newly compiled program, from the terminal of MacOSX or Linux, simply type out the path to the file - eg. if it's in your Documents, type in ~/Documents/filename where filename is the name of the file. Alternatively, if the file is in the current directory your terminal is in (use cd --help to find out more), then use ./filename. Congratulations! You've now just executed your first program that you wrote!


Assignments

[edit]
  • Name one piece of hardware that acts as user input.
  • Name one piece of hardware that acts as user output.
  • What is a computer program made up of?
  • What is the computer's true language?
  • What is the lowest-level, platform-dependent language called?
  • Is C compiled or assembled?
  • Were you able to compile the example in this lesson? If so, what happened?

Template:Subpage navbar