ผลต่างระหว่างรุ่นของ "ภาษาซี"

เนื้อหาที่ลบ เนื้อหาที่เพิ่ม
Potapt (คุย | ส่วนร่วม)
ไม่มีความย่อการแก้ไข
ไม่มีความย่อการแก้ไข
ป้ายระบุ: แก้ไขจากอุปกรณ์เคลื่อนที่ แก้ไขจากเว็บสำหรับอุปกรณ์เคลื่อนที่
บรรทัด 56:
* เท่ากับสองตัว <code>==</code> ใช้สำหรับเปรียบเทียบความเท่ากัน แทนที่จะเป็น <code>.EQ.</code> ในภาษาฟอร์แทรนหรือ <code>=</code> ใน[[ภาษาเบสิก]]และภาษาอัลกอล
* ตรรกะ "และ" กับ "หรือ" แทนด้วย <code>&&</code> กับ <code>||</code> ตามลำดับ แทนที่จะเป็นตัวดำเนินการ ∧ กับ ∨ ในภาษาอัลกอล แต่ตัวดำเนินการดังกล่าวจะไม่ประเมินค่าตัวถูกดำเนินการทางขวา ถ้าหากผลลัพธ์จากทางซ้ายสามารถพิจารณาได้แล้ว เหตุการณ์เช่นนี้เรียกว่า[[การประเมินค่าแบบลัดวงจร]] (short-circuit evaluation) และตัวดำเนินการดังกล่าวก็มีความหมายต่างจาก[[การดำเนินการระดับบิต|ตัวดำเนินการระดับบิต]] <code>&</code> กับ <code>|</code>
 
=== คุณลักษณะที่ขาดไป ===
ธรรมชาติของภาษาในระดับต่ำช่วยให้โปรแกรมเมอร์ควบคุมสิ่งที่คอมพิวเตอร์กระทำได้อย่างใกล้ชิด ในขณะที่อนุญาตให้มีการปรับแต่งพิเศษและการทำให้เหมาะที่สุดสำหรับแพลตฟอร์มหนึ่งใดโดยเฉพาะ สิ่งนี้ทำให้รหัสสามารถทำงานได้อย่างมีประสิทธิภาพบนฮาร์ดแวร์ที่มีทรัพยากรจำกัดมาก ๆ ได้เช่น[[ระบบฝังตัว]]
 
ภาษาซีไม่มีคุณลักษณะบางอย่างที่มีในภาษาอื่นอาทิ
* ไม่มีการนิยาม[[ฟังก์ชันซ้อนใน]]
* ไม่มีการกำหนดค่าแถวลำดับหรือสายอักขระโดยตรง (การคัดลอกข้อมูลจะกระทำผ่านฟังก์ชันมาตรฐาน แต่ก็รองรับการกำหนดค่าวัตถุที่มีชนิดเป็น <code>struct</code> หรือ <code>union</code>)
* ไม่มี[[การเก็บข้อมูลขยะ]]โดยอัตโนมัติ
* ไม่มีข้อกำหนดเพื่อ[[การตรวจสอบขอบเขต]]ของแถวลำดับ
* ไม่มี[[การเขียนโปรแกรมเชิงแถวลำดับ|การดำเนินการสำหรับแถวลำดับทั้งชุด]]ในระดับตัวภาษา
* ไม่มีวากยสัมพันธ์สำหรับ[[ช่วงค่า]] (range) เช่น <code>A..B</code> ที่ใช้ในบางภาษา
* ก่อนถึงภาษาซี99 ไม่มีการแบ่งแยก[[ชนิดข้อมูลแบบบูล]] (ค่าศูนย์หรือไม่ศูนย์ถูกนำมาใช้แทน) <ref>ภาษาซี99 เพิ่มชนิดข้อมูล <code>_Bool</code> แต่มันไม่ใช่การปรับปรุงใหม่เพื่อเข้าสู่บริบทแบบบูล เราสามารถจำลองชนิดข้อมูลแบบบูลได้ดังวิธี <code>enum { false, true } bool;</code> แต่การกระทำเช่นนี้ก็ไม่เป็นการจัดสรรคุณลักษณะทั้งหมดของชนิดข้อมูลแบบบูล</ref>
* ไม่มี[[ส่วนปิดคลุม (วิทยาการคอมพิวเตอร์)|ส่วนปิดคลุม]]แบบรูปนัย (closure) หรือฟังก์ชันในรูปแบบพารามิเตอร์ (มีเพียงตัวชี้ของฟังก์ชันและตัวแปร)
* ไม่มี[[ตัวสร้าง (วิทยาการคอมพิวเตอร์)|ตัวสร้าง]]และ[[โครูทีน]] การควบคุมกระแสการทำงานภายในเทร็ดมีเพียงการเรียกใช้ฟังก์ชันซ้อนลงไป เว้นแต่การใช้ฟังก์ชัน <code>[[longjmp]]</code> หรือ <code>[[setcontext]]</code> จากไลบรารี
* ไม่มี[[การจัดกระทำสิ่งผิดปรกติ]] (exception handling) ฟังก์ชันไลบรารีมาตรฐานจะแสดงเงื่อนไขข้อผิดพลาดด้วย[[ตัวแปรส่วนกลาง]] <code>[[errno]]</code> และ/หรือค่ากลับคืนพิเศษ และฟังก์ชันไลบรารีได้เตรียม <code>goto</code> แบบไม่ใช่เฉพาะที่ไว้ด้วย
* [[การเขียนโปรแกรมเชิงมอดูล]]รองรับแค่ระดับพื้นฐานเท่านั้น
* [[การโอเวอร์โหลดเมท็อด|การโอเวอร์โหลด]]ฟังก์ชันหรือตัวดำเนินการไม่รองรับภาวะหลายรูปแบบขณะแปลโปรแกรม
* [[การเขียนโปรแกรมเชิงวัตถุ]]รองรับในระดับที่จำกัดมาก โดยพิจารณาจากภาวะหลายรูปแบบกับ[[การรับทอด]] (inheritance)
* [[การซ่อนสารสนเทศ]] (encapsulation) รองรับในระดับที่จำกัด
* ไม่รองรับโดยพื้นฐานกับการทำงานแบบ[[มัลติเทร็ด]]และ[[เครือข่ายคอมพิวเตอร์]]
* ไม่มีไลบรารีมาตรฐานสำหรับ[[คอมพิวเตอร์กราฟิกส์]]และความจำเป็นหลายอย่างในการเขียนโปรแกรมประยุกต์
คุณลักษณะเหล่านี้จำนวนหนึ่งมีให้ใช้ได้จากส่วนขยายในตัวแปลโปรแกรมบางตัว หรือจัดสรรไว้แล้วในสภาพแวดล้อมของระบบปฏิบัติการ (เช่น[[โพสซิกซ์]]) หรือจัดเตรียมโดยไลบรารีภายนอก หรือสามารถจำลองโดยดัดแปลงแก้ไขรหัสที่มีอยู่ หรือบางครั้งก็ถูกพิจารณาว่าไม่ใช่รูปแบบการเขียนโปรแกรมที่เหมาะสม
 
=== พฤติกรรมไม่นิยาม ===
เข้าถึงจาก "https://th.wikipedia.org/wiki/ภาษาซี"