วันอังคารที่ 7 กุมภาพันธ์ พ.ศ. 2555

การเรียนรู้ ภาษาซี ความรู้เบื้อต้นภาษาซี

วิวัฒนาการของภาษา C
                ภาษา C พัฒนาโดย Dennis Ritchie แห่งห้องปฏิบัติการ Bell Laboratories ในปี ค.ศ 1972 พัฒนาเพื่อใช้งานบนระบบปฏิบัติการ Unix  ซึ่งมีลำดับการพัฒนาดังนี้
                ภาษา Algol (ปี 1960 : ใช้คำนวณ) à ภาษา CPL (ปี 1963) à ภาษา BCPL (ปี 1967) àภาษา B (ปี 1970) à ภาษา C (ปี 1972) à ภาษา C++ (ปี 1990) à ภาษา Java, C#, Visual C++

ภาษาคอมพิวเตอร์             
                การทำงานกับเครื่องคอมพิวเตอร์  เป็นการติดต่อสารระหว่างมนุษย์กับเครื่องคอมพิวเตอร์  นั่นคือการสั่งให้เครื่องคอมพิวเตอร์ทำงานหรือเป็นการโต้ตอบระหว่างมนุษย์กับเครื่องคอมพิวเตอร์  การที่จะพูดจากับคอมพิวเตอร์ได้ต้องอาศัยภาษาที่คอมพิวเตอร์เข้าใจ ภาษาคอมพิวเตอร์ในปัจจุบันถูกพัฒนามาจากภาษา คอมพิวเตอร์ในยุคต้น ๆ  ตามแนวความคิดของผู้ประดิษฐ์ภาษาเพื่อให้มีประสิทธิภาพมากขึ้น  โดยถูกสร้างขึ้นมาตามวัตถุประสงค์และความแตกต่างของการใช้งาน  เช่นงานเกี่ยวกับข้อมูลข่าวสาร  งานคำนวณทางด้านคณิตศาสตร์  งานด้านการบัญชี  งานด้านกราฟิก  และงานเขียนรายงานทางด้านเอกสารเป็นต้น ภาษา คอมพิวเตอร์ที่ดีควรเป็นภาษาที่เขียนง่ายเข้าใจง่าย  มีขนาดเล็กมีความรวดเร็วและความถูกต้องสูง  มีความยืดหยุ่นในการใช้งานสูง  หมายความว่ามีข้อจำกัดต่ำ  สามารถที่จะประยุกต์ใช้งานได้กว้างขวาง 
                ระดับของภาษาคอมพิวเตอร์
1.             ภาษาระดับต่ำ (Low-level Language)  เช่น  ภาษาเครื่อง (machine code) และภาษา Assembly
2.             ภาษาระดับกลาง (Middle-level Language) เช่น  ภาษา C
3.             ภาษาระดับสูง (High-level Language) เช่น Fortran, Cobol, Pascal, Vissual Basic, Java

1.2  การเข้าใช้งานโปรแกรม
                C: \ >CD  TC 
                เมื่อเข้าไดเรคเทอรี่ TC  โดยการพิมพ์  TC  เพื่อเรียกโปรแกรมภาษาซี    ดังตัวอย่าง
                C:\ TC>TC 











ส่วนประกอบหน้าจอ Editor
                             Menu bar                                        Editor  Window


File  Edit  Search  Run  compile  Debug  Project  Option  Window  Help

                                                                            NONAMEOO.CPP
                                                                               
                                                                                                               
                                                                                                                                         ชื่อซอร์สไฟล์
                                     
                                                                  บอกตำแหน่งเคอร์เซอร์                       
                                                                 ส่วนของ Message

                  1.1        
                                                                                                      Message
                                      Hotkey
     


F1  Help   Alt-F8  Next  Msg   Alt-F7  Prev  Msg  Alt-F9  Compile  F9  Make  F10  Menu


รูปที่  2  แสดงสภาพแวดล้อมของภาษาซี



                ส่วนประกอบที่สำคัญของภาษาซีที่ใช้เป็นส่วน  ใหญ่ในการเขียนโปรแกรมได้แก่

Menu  bar  เป็นส่วนที่ให้เลือกทำรายการต่าง ๆ ในการเขียนซอร์สโค้ด  สามารถเข้าสู่เมนูโดยการกด  F10  รายการต่างบนเมนู  ได้แก่
                -เมนู File  เป็นส่วนที่ใช้ในการจัดการเกี่ยวกับไฟล์






                                                File

New
Open…                             F3
Save…                              F2                                 
Save  as…
Save  all..
Change  dir…
Print
Dos  shell
Quit                                   Alt+x


        
   รูปที่  3  แสดงส่วนประกอบของเมนู  File

New                        เปิดแฟ้มข้อมูลใหม่  จะได้ส่วนของ Editor  ที่ว่างเปล่าใช้ในการเขียนซอร์สโค้ดใหม่
Open                      เปิดซอร์โค้ดเก่าขึ้นมาแก้ไข
Save                       บันทึกไฟล์
Save  as                 บันทึกไฟล์โดยเปลี่ยนชื่อใหม่หรือเปลี่ยนแหล่งเก็บใหม่
Save  all                บันทึกทุกไฟล์ที่เปิดอยู่ทุกไฟล์
Chang  dir            เป็นส่วนที่ใช้ในการเปลี่ยนแปลงไดเรคเทอรี่ ในการจัดการเกี่ยวกับไฟล์                              
Print                       ใช้ในการพิมพ์ซอร์สโค้ดออกทางเครื่องพิมพ์
Dos  shell             ไปที่  Dos  ชั่วคราว  เป็นส่วนที่ใช้ในการกลับไปออกจัดการกับ  Dos  โดยตรงโดยไม่ต้องปิดเทอร์โบซี  และกับเข้าสู่เทอร์โบซีอีกครั้งโดยการพิมพ์ข้อความ  EXIT
Quit                        ออกจาเทอร์โบซี
                  เราสามารถใช้  Hotkey  เพื่อให้สามารถทำงานได้เร็วขึ้น  โดยการกด Alt  ค้างแล้วตามด้วยตัวอักษร
            ที่เป็นสีแดงของเมนูนั้น เช่น Alt+F+S  เป็นการบันทึกไฟล์ หรือกด F2 ตามที่ปรากฏในเมนูก็ได้ผลลัพธ์
            เช่นเดียวกัน


- Run  เป็นคำสั่งให้รันโปรแกรม  และตรวจหาข้อบกพร่อง (debug)  มีคำสั่งย่อยดังนี้ 
Run (Ctrl + F9) เป็นคำสั่งให้ทำการประมวลผลโปรแกรมที่อยู่ในหน่วยความจำ  สามารถรัน  โปรแกรมได้โดยการกด  Alt + F9  ถ้าโปรแกรมยังไม่ได้ผ่านการคอมไพล์  เทอร์โบซี  จะทำการคอมไพล์ก่อนแล้วจึงรันโปรแกรม  ผลลัพธ์ของโปรแกรมจะแสดงใน  หน้าต่างเอาท?พุท  ซึ่งสามารถดูดได้โดยกด Alt + F5  และกลับเข้าสู่หน้าต่างเอดิตโดยการกดคีย์ใด ๆ
Program  reset  (Ctrl + F2)  เป็นคำสั่งให้ยกเลิกดีบักต่าง ๆ
Goto  cursor  (F4)  เป็นคำสั่งให้รันโปรแกรมตั้งแต่ต้นจนถึงคำสั่งที่อยู่ก่อนบรรทัดที่เคอร์เซอร์  ปรากฏอยู่
Trace  into  (F7)  เป็นคำสั่งให้ทำทีละคำสั่งเริ่มจาก main()  แล้วจะหยุดรอเมื่อกด  F7  จะทำคำสั่งถัดไป
Step  over (F8)  เป็นคำสั่งให้ทำงานในลักษณะเดียวกัน  Trace  into  ต่างกันที่ Step  over  จะไม่หยุดในแต่ละคำสั่งอขงฟังก์ชั่น  ในกรณีที่มีการเรียกใช้ฟังก์ชั่น

                -  Compile  เป็นคำสั่งที่ใช้ในการคอมไพล์โปรแกรม หรือสร้างไฟล์ชนิด .EXE  จากโปรแกรมที่อยู่บนหน้าต่าง edit  ที่กำลังทำงานอยู่ หรือบนโปรเจ็คที่เกี่ยวข้อง
Compile (Alt + F9) เป็นคำสั่งให้คอมไพล์ที่แสดงอยู่บนหน้าต่าง  edit  (.CPP)  ให้เป็นไฟล์ ชนิด .OBJ
                เมื่อ  Turbo C++  คอมไพล์  จะมีหน้าต่างบอกสถาะนะทางหน้าจอ  โดยจะบอกผลของการคอมไพล์  ได้แก่  Line  compile  และจำนวนคำสั่งที่  Error  และ  Warning
                เมื่อการคอมไพล์ไม่สมบูรณ์ให้กดคีย์ใด ๆ เพื่อกลับไปที่ส่วนของหน้าต่าง  edit
                ถ้าคอมไพล์ไม่สมบูรณ์ Turbo C++   จะแสดงส่วนที่ผิดพลาด (error)  หรือ  warning ที่หน้าต่าง massage  (Massage  Window)
Make (F9)  เป็นคำสั่งเกี่ยวกับการสร้างไฟล์ชนิด  .EXE  ไฟล์ .EXE  ที่ได้จากคำสั่ง  Make  เกิดจากกรณีใดกรณีหนึ่งในสองกรณีดังต่อไปนี้
1.             ได้จากโปรเจ็คไฟล์ (Project  File)  เป็นไฟล์ชนิด .PRJ  ซึ่งถูกกำหนดโดยคำสั่ง Open  project 
2.             ได้จาก  Source  Code  จากหน้าต่าง  edit  ที่กำลังทำงานอยู่
Link       คำสั่งนี้จะลิงค์ไฟล์ชนิด .OBJ  เข้ากับไลบรารี่มาตรฐานของ  Turbo C++  เพื่อสร้างไฟล์ชนิด .EXE

Build  all      เป็นคำสั่งคอมไพล์ไฟล์ทุกไฟล์ซึ่งกำหนดในไฟล์ชนิด  .PRJ   โดยไม่มีการตรวจสอบ และเวลาแล้วสร้างไฟล์ชนิด .EXE ของไฟลบ์ชนิด .PRJ  คำสั่งนี้จะให้ผลเหมือนคำสั่ง Make  ต่างกันที่คำสั่ง Make  จะตรวจสอบวันที่และเวลาของไฟล์ชนิด .CPP  และ  .OBJ  (ชื่อเดียวกัน)  โดยถ้าวันที่และเวลาที่บันทึกไฟล์ชนิด  .OBJ  มีลำดับก่อนไฟชนิด .CPP  ก็จะคอมไพล์ไฟล์ชนิด  .CPP นั้นใหม่

-Options  เป็นคำสั่งที่ใช้กำหนดการทำงานของ  Tubo C++  คำสั่งนี้มีคำสั่งย่อยทั้งหมด 10 คำสั่ง  ในหัวข้อนี้จะกล่าวเฉพาะคำสั่งที่จำเป็นได้แก่คำสั่ง Directories
Directories  เป็นคำสั่งที่ใช้ในการกำหนดไดเรคเทรี่ของไฟล์ที่สำคัญใน  Tubo C++  มี  dialog  box  ของการกำหนดไดเรคเทอรี่  ดังนี้  :-




   
Include  Directories
                             C:\tc\include

Library  Directories
                             C:\tc\lib
                               
                                 Output  Directories
                             C:\tc\output

                                Source  Directories

                       
                                                                                         Ok            Cancel              Help

รูปที่ 4  แสดงองค์ประกอบของ  Dialog  Directories

                จากรูปเมื่อเลือกรายการย่อย  Directory  จากเมนู  Options  จะได้  dialog  box  เพื่อให้กำหนดเส้นทาง (path)  ของไฟล์ที่เป็นเฮดเดอร์ไฟล์และไฟล์ที่เป็นไลบรารี่มาตรฐาน  ในกรณีที่กำหนดเส้นทางไม่ถูกต้องหรือไม่ได้กำหนดเส้นทางของไฟล์เหล่านี้  ก็ไม่สามารถที่จะคอมไพล์หรือรันโปรแกรมได้  นอกจากนี้ยังใช้ในการกำหนดเส้นทางที่ใช้เก็บ Source  code  และ  Object  file  อีกด้วย  ดังรายละเอียยดต่อไปนี้
Include  directory  เป็นส่วนที่ใช้กำหนดเส้นทางของ  Header  file  ที่มีชนิดของไฟล์เป็น .H  จากรูปที่ 1.4  กำหนดว่า  Header  file  อยู่ที่  C:\tc\include  หมายความว่าไฟล์ที่มีชนิดของไฟล์เป็น .H  เก็บอยู่ที่ได้เรคทอรี่ย่อย  include  ของได้เรคทอรี่ tc บนไดรฟ์ C
Library  Directories  เป็นส่วนที่ใช้กำหนดเส้นทางของไลบรารี่มาตรฐาน  (Library  file)  ที่มีชนิดของไฟล์เป็น .LIB จากรูปที่ 1.4 กำหนดให้ไลบรารี่มาตรฐานอยู่ที่ C:\tc\lb นั่นคือไฟล์ที่มีชนิด .LIB  เก็บอยู่ที่ไดเรคเทอรี่ย่อย  LB  ของได้เรคเทอรี่  tc  [นไดรฟ์  C
Output  Directory  เป็นส่วนที่ใช้กำหนดเส้นของ  Output  file  เป็นไฟล์ที่ได้จากการคอมไพล์และการลิงค์ได้แก่ไฟล์ที่มีชนิดของไฟล์เป็น .OBJ  และ  EXE  จากรูปที่ 1.4 Output  file  ถูกกำหนดเส้นทางไว้ที่ไดเรคเทอรี่ย่อย  Output ของไดเรคเทอรี่ tc  บนไดรฟ์  C  ถ้าไม่มีการระบุเส้นทางของ Output  file  Turbo C++  จะเก็บไฟล์เหล่านี้ไว้ที่  ไดเรคทอรี่ tc
Source  Directory  เป็นส่วนที่ใช้กำหนดเส้นทางของ Source  code  เป็นไฟล์ที่มีชนิดของไฟล์ เป็น .CPP  ในบางครั้งอาจไม่จำเป็นต้องระบุเส้นทางของ  Source  Directory   ก็ได้
- Edit  Window  เป็นส่วนที่ใช้ในการเขียน  source  code  หรือเขียนโปรแกรม และใช้ในการแก้ไขโปรแกรมต่าง ๆ ในกรณีที่มีการคอมไพล์แล้วเกิดการ error  แก้ไขได้ที่  Edit  Windows

-Message  Window  เป็นส่วนที่แสดงสถานะของการ error  หรือ warning  ที่เกิดจากคอมไพล์ โดย message  window จะบอกรายละเอียดของการ  error  หรือ warning  และสามารถที่จะแก้ไขได้ที่  Edit  Window

-Hotkey  เป็นส่วนที่บอกหน้าที่ต่าง ๆ ของคีย์พิเศษ  เพื่อให้การทำงานบน  Turbor C++  จะกล่าว
รายละเอียดในหัวข้อต่อไป

คีย์พิเศษ  (Hotkey)
                คีย์พิเศษจะมีหน้าที่คล้ายกับคีย์พิเศษต่าง ๆ ในการใช้งาน บน Word    หน้าที่ของคีย์พิเศษที่ควรทราบมีดังนี้

คีย์สำหรับการเลื่อนเคอร์เซอร์
                             เลื่อนเคอร์เซอร์ไปทางขวา  1  คอลัมน์
                             เลื่อนเคอร์เซอร์ไปทางซ้าย  1  คอลัมน์
                                เลื่อนเคอร์เซอร์ขึ้นไปบรรทัด  1 บรรทัด
                                เลื่อนเคอร์เซอร์ลงไปบรรทัดล่าง  1 บรรทัด
Ctrl + A                                เลื่อนเคอร์เซอร์ไปที่อักษรตัวแรกของคำที่เคอร์เซอร์อยู่
Ctrl + F                 เลื่อนเคอร์เซอร์ไปที่อักษรตัวสุดท้ายของคำที่เคอร์เซอร์อยู่
Ctrl + QS             เลื่อนเคอร์เซอร์ไปที่ต้นบรรทัด
Ctrl + QE             เลื่อนเคอร์เซอร์ไปที่บรรทัดแรก  โดยมีคอลัมน์ตรงกับคอลัมน์เดิม
Ctrl + QX             เลื่อนเคอร์เซอร์ไปที่บรรทัดสุดท้าย  โดยมีคอลัมน์ตรงกับคอลัมน์เดิม
Ctrl + QR             เลื่อนเคอร์เซอร์ไปที่บรรทัดแรก
Ctrl + QC             เลื่อนเคอร์เซอร์ไปที่บรรทัดสุดท้าย
PgUp                     เลื่อนขึ้น  1  หน้า               
PgDn                     เลื่อนลง  1  หน้า               

คีย์สำหรับลบข้อความและแทรกบรรทัด
Ctrl + Y                                ลบบรรทัดที่มีเคอร์เซอร์อยู่
Ctrl + N                                แทรกบรรทัดที่มีเคอร์เซอร์อยู่
Ctrl + QY             ลบข้อความตั้งแต่ตำแหน่งที่เคอร์เซอร์อยู่จนถึงท้ายบรรทัด
Ctrl + T                                ลบข้อความตั้งแต่ตำแหน่งที่เคอร์เซอร์อยู่จนถึงอักษรตัวสุดท้ายของคำ
Ctrl + G                                ลบตัวอักษรที่ตำแหน่งที่เคอร์เซอร์อยู่
Del                         ลบตัวอักษรที่ตำแหน่งที่เคอร์เซอร์อยู่
Backspace             ลบตัวอักษรที่อยู่ทางซ้ายของที่เคอร์เซอร์
คีย์ที่เกี่ยวกับการสร้างบล็อกสำหรับ Turbo C
Ctrl + KB             กำหนดตำแหน่งเริ่มต้นบล็อก
Ctrl + KK             กำหนดตำแหน่งท้ายบล็อก
Ctrl + KC             คัดลอกบล็อก
Ctrl + KV             วางข้อความของบล็อกที่ได้จากการคัดลอก
Ctrl + KW            เขียนข้อความที่อยู่ในบล็อก
Ctrl + KR             อ่านข้อความจากไฟล์มาแสดง    ตำแหน่งที่เคอร์เซอร์อยู่
Ctrl + KH             ซ่อนบล็อก เมื่อกด  Ctrl + KH  อีกครั้งจะแสดงบล็อกเดิมออกมา
Ctrl + KY             ลบบล็อก
Ctrl + KP             พิมพ์ข้อความที่อยู่ในบล็อกหรือโปรแกรมที่อยู่ในหน้าต่างเอดิตออกทางเครื่องพิมพ์

คีย์ที่จัดการเกี่ยวกับไฟล์
F2                           บันทึกโปรแกรมที่อยู่บนหน้าต่างเอดิด
F3                           เปิดไฟล์จากแผ่นแม่เหล็กเข้าสู่หน้าต่างเอดิต

คีย์การเกี่ยวกับคอมไพล์
Alt+ F9                 Compile
F9                           Make 
การเขียนโปรแกรมระบบเป็นการใช้งานหลักของภาษาซี ซึ่งรวมไปถึงการพัฒนาระบบปฏิบัติการและโปรแกรมประยุกต์ระบบฝังตัว เนื่องจากลักษณะเฉพาะอันเป็นที่ต้องการถูกรวมเข้าไว้ด้วยกัน อย่างเช่น ความสามารถในเคลื่อนย้ายได้กับประสิทธิภาพของรหัสต้นฉบับ ความสามารถในการเข้าถึงที่อยู่ของฮาร์ดแวร์ที่ระบุ ความสามารถเรื่อง type punning เพื่อให้เข้ากับความต้องการการเข้าถึงข้อมูลที่กำหนดไว้จากภายนอก และความต้องการทรัพยากรระบบขณะทำงานต่ำ ภาษาซีสามารถใช้เขียนโปรแกรมเว็บไซต์โดยใช้ซีจีไอเป็น "เกตเวย์" เพื่อแลกเปลี่ยนสารสนเทศระหว่างเว็บแอปพลิเคชัน เซิร์ฟเวอร์ และเบราว์เซอร์ [10] ปัจจัยบางอย่างที่ทำให้เลือกภาษาซีแทนที่จะเป็นภาษาอินเทอร์พรีตเตอร์ คือความเร็ว เสถียรภาพ และความอ่อนไหวต่อการเปลี่ยนแปลงในสภาพแวดล้อมของการดำเนินงาน เนื่องจากเป็นธรรมชาติของภาษาคอมไพเลอร์ [11]
ผลจากการยอมรับในระดับกว้างขวางและประสิทธิภาพของภาษาซี ทำให้ตัวแปลโปรแกรม ตัวแปลคำสั่ง ไลบรารีต่าง ๆ ของภาษาอื่น มักพัฒนาขึ้นด้วยภาษาซี ตัวอย่างเช่น ตัวแปลโปรแกรมภาษาไอเฟลหลายโปรแกรมส่งข้อมูลออกเป็นรหัสภาษาซีเป็นภาษากลาง เพื่อส่งต่อให้ตัวแปลโปรแกรมภาษาซีต่อไป การพัฒนาสายหลักของภาษาไพทอน ภาษาเพิร์ล 5 และภาษาพีเอชพี ทั้งหมดถูกเขียนขึ้นด้วยภาษาซี
ภาษาซีมีประสิทธิภาพสำหรับคอมพิวเตอร์เพื่องานคำนวณและวิทยาศาสตร์ เนื่องจากความสิ้นเปลืองต่ำ ธรรมชาติของภาษาระดับต่ำ ธรรมชาติของภาษาที่ถูกแปล และมีส่วนคณิตศาสตร์ที่ดีในไลบรารีมาตรฐาน ตัวอย่างของการใช้ภาษาซีในงานคำนวณและวิทยาศาสตร์ เช่นจีเอ็มพี ไลบรารีวิทยาศาสตร์ของกนู แมเทอแมติกา แมตแล็บ และแซส
ภาษาซีบางครั้งใช้เป็นภาษาระหว่างกลางในการทำให้เกิดผลของภาษาอื่น แนวคิดนี้อาจใช้เพื่อความสะดวกต่อการเคลื่อนย้าย โดยให้ภาษาซีเป็นภาษาระหว่างกลาง ซึ่งไม่จำเป็นต้องพัฒนาตัวสร้างรหัสแบบเจาะจงเครื่อง ตัวแปลโปรแกรมที่ใช้ภาษาซีในทางนี้เช่น บิตซี แกมบิต จีเอชซี สควีก และวาลา เป็นต้น อย่างไรก็ตามภาษาซีถูกออกแบบมาเพื่อเป็นภาษาเขียนโปรแกรม ไม่ใช่ภาษาเป้าหมายของตัวแปลโปรแกรม จึงเหมาะสมน้อยกว่าสำหรับการใช้เป็นภาษาระหว่างกลาง ด้วยเหตุผลนี้นำไปสู่การพัฒนาภาษาระหว่างกลางที่มีพื้นฐานบนภาษาซีเช่น ภาษาซีไมนัสไมนัส
ผู้ใช้ขั้นปลายใช้ภาษาซีอย่างแพร่หลายเพื่อสร้างแอปพลิเคชันของผู้ใช้เอง แต่เมื่อแอปพลิเคชันใหญ่ขึ้น การพัฒนาเช่นนั้นมักจะย้ายไปทำในภาษาอื่นที่พัฒนามาด้วยกัน เช่นภาษาซีพลัสพลัส ภาษาซีชาร์ป ภาษาวิชวลเบสิก เป็นต้น

 การพัฒนาช่วงแรก










การเริ่มต้นพัฒนาภาษาซีเกิดขึ้นที่เบลล์แล็บส์ของเอทีแอนด์ทีระหว่าง พ.ศ. 2512–2516 [2] แต่ตามข้อมูลของริตชี ช่วงเวลาที่เกิดความสร้างสรรค์มากที่สุดคือ พ.ศ. 2515 ภาษานี้ถูกตั้งชื่อว่า "ซี" เพราะคุณลักษณะต่าง ๆ ต่อยอดมาจากภาษาก่อนหน้าคือ "บี" ซึ่งจากข้อมูลของเคน ทอมป์สัน (Ken Thompson) กล่าวว่าภาษาบีเป็นรุ่นที่แยกตัวออกจากภาษาบีซีพีแอลอีกทอดหนึ่ง
จุดเริ่มต้นของภาษาซีผูกอยู่กับการพัฒนาระบบปฏิบัติการยูนิกซ์อย่างใกล้ชิด ซึ่งเดิมพัฒนาด้วยภาษาแอสเซมบลีบนหน่วยประมวลผลพีดีพี-7โดยริตชีและทอมป์สัน โดยผสมผสานความคิดหลากหลายจากเพื่อนร่วมงาน ในตอนท้ายพวกเขาตัดสินใจที่จะย้ายระบบปฏิบัติการนั้นลงในพีดีพี-11 แต่ภาษาบีขาดความสามารถบางอย่างที่จะใช้คุณลักษณะอันได้เปรียบของพีดีพี-11 เช่นความสามารถในการระบุตำแหน่งที่อยู่เป็นไบต์ จึงทำให้เกิดการพัฒนาภาษาซีรุ่นแรกขึ้นมา
รุ่นดั้งเดิมของระบบยูนิกซ์บนพีดีพี-11ถูกพัฒนาขึ้นด้วยภาษาแอสเซมบลี เมื่อประมาณ พ.ศ. 2516 ภาษาซีเพิ่มชนิดข้อมูล struct ทำให้ภาษาซีเพียงพออย่างมีประสิทธิภาพ ซึ่งเคอร์เนลยูนิกซ์ส่วนใหญ่ถูกเขียนด้วยภาษาซี นี้ก็เป็นเคอร์เนลหนึ่งของระบบปฏิบัติการที่พัฒนาด้วยภาษาอื่นนอกเหนือจากภาษาแอสเซมบลี (ระบบอื่นเช่นมัลติกส์เขียนด้วยภาษาพีแอล/วัน เอ็มซีพีสำหรับเบอร์โรส์ บี5000เขียนด้วยภาษาอัลกอล ในปี พ.ศ. 2504)

[แก้] ภาษาเคแอนด์อาร์ซี

เมื่อ พ.ศ. 2521 ไบรอัน เคอร์นิกัน (Brian Kernighan) และเดนนิส ริตชี ได้ตีพิมพ์หนังสือเล่มแรกชื่อ เดอะซีโปรแกรมมิงแลงกวิจ (The C Programming Language) [9] ซึ่งเป็นที่รู้จักในกลุ่มโปรแกรมเมอร์ภาษาซีว่า "เคแอนด์อาร์" (K&R อักษรย่อของผู้แต่งทั้งสอง) หนังสือเล่มนี้ทำหน้าที่เป็นข้อกำหนดของภาษาอย่างไม่เป็นทางการมาหลายปี ภาษาซีรุ่นดังกล่าวจึงมักถูกอ้างถึงว่าเป็น ภาษาเคแอนด์อาร์ซี (K&R C) ส่วนหนังสือที่ปรับปรุงครั้งที่สองครอบคลุมมาตรฐานแอนซีซีที่มีขึ้นทีหลัง [1]
ภาษาเคแอนด์อาร์ซีได้แนะนำคุณลักษณะหลายประการเช่น
  • ไลบรารีไอ/โอมาตรฐาน
  • ชนิดข้อมูล long int (จำนวนเต็มขนาดยาว)
  • ชนิดข้อมูล unsigned int (จำนวนเต็มไม่มีเครื่องหมาย)
  • ตัวดำเนินการกำหนดค่าแบบประสมในรูปแบบ =ตัวดำเนินการ (เช่น =-) ถูกเปลี่ยนเป็น ตัวดำเนินการ= (เช่น -=) เพื่อลดปัญหาความกำกวมเชิงความหมาย อย่างเช่นกรณี i=-10 ซึ่งจะถูกตีความว่า i =- 10 แทนที่จะเป็นอย่างที่ตั้งใจคือ i = -10
แม้ว่าหลังจากการเผยแพร่มาตรฐานของภาษาซีเมื่อ พ.ศ. 2532 ภาษาเคแอนด์อาร์ซีถูกพิจารณาว่าเป็น "ส่วนร่วมต่ำสุด" อยู่เป็นเวลาหลายปี (ความสามารถในการแปลรหัสจำนวนหนึ่งเป็นคำสั่งซึ่งทำงานได้บนเครื่องใดก็ตามเป็นอย่างน้อย) ซึ่งโปรแกรมเมอร์ภาษาซีต้องจำกัดความสามารถของพวกเขาในกรณีที่ต้องการให้ระบบสามารถใช้ได้กับหลายเครื่องมากที่สุด เนื่องจากตัวแปลโปรแกรมเก่า ๆ ก็ยังคงมีการใช้งานอยู่ และการเขียนภาษาซีแบบเคแอนด์อาร์อย่างระมัดระวังสามารถเข้ากันได้กับภาษาซีมาตรฐานเป็นอย่างดี
ในภาษาซีรุ่นแรก ๆ เฉพาะฟังก์ชันที่คืนค่าไม่เป็นจำนวนเต็ม จำเป็นต้องประกาศไว้ก่อนการนิยามฟังก์ชันหากมีการเรียกใช้ อีกนัยหนึ่งคือ ฟังก์ชันที่ถูกเรียกใช้โดยไม่มีการประกาศมาก่อน ถือว่าฟังก์ชันนั้นจะคืนค่าเป็นจำนวนเต็มหากค่าของมันถูกใช้งาน