กลับไปหน้าบทความ

อ่าน 2 นาที

พฤติกรรมที่ไม่ระบุ

ใน การเขียน โปรแกรม คอมพิวเตอร์ พฤติกรรมที่ไม่ระบุ คือพฤติกรรมที่อาจแตกต่างกันไปในการใช้งาน ภาษาโปรแกรม ที่แตกต่างกัน โปรแกรมอาจกล่าวได้ว่ามีพฤติกรรมที่ไม่ระบุเมื่อ ซอร์สโค้ด ของ...

พฤติกรรมที่ไม่ระบุ

ใน การเขียน โปรแกรมคอมพิวเตอร์พฤติกรรมที่ไม่ระบุคือพฤติกรรมที่อาจแตกต่างกันไปในการใช้งานภาษาโปรแกรม ที่แตกต่างกัน โปรแกรมอาจกล่าวได้ว่ามีพฤติกรรมที่ไม่ระบุเมื่อซอร์สโค้ด ของ โปรแกรมอาจสร้างไฟล์ปฏิบัติการที่แสดงพฤติกรรมที่แตกต่างกันเมื่อคอมไพล์บนคอมไพเลอร์ที่แตกต่างกัน หรือบนคอมไพเลอร์เดียวกันแต่มีการตั้งค่าที่แตกต่างกัน หรือแม้กระทั่งในส่วนต่างๆ ของไฟล์ปฏิบัติการเดียวกัน ในขณะที่มาตรฐานหรือข้อกำหนดของภาษาที่เกี่ยวข้องอาจกำหนดช่วงของพฤติกรรมที่เป็นไปได้ พฤติกรรมที่แน่นอนขึ้นอยู่กับการใช้งานและอาจไม่สามารถกำหนดได้อย่างสมบูรณ์เมื่อตรวจสอบซอร์สโค้ดของโปรแกรม[ 1 ]พฤติกรรมที่ไม่ระบุมักจะไม่ปรากฏให้เห็นในพฤติกรรมภายนอกของโปรแกรมที่ได้ แต่บางครั้งอาจนำไปสู่ผลลัพธ์ที่แตกต่างกัน ซึ่งอาจทำให้เกิดปัญหา เรื่องความสามารถในการพกพา

คำนิยาม

เพื่อให้คอมไพเลอร์สามารถสร้างโค้ดที่เหมาะสมที่สุดสำหรับแพลตฟอร์มเป้าหมายของตน มาตรฐานภาษาโปรแกรมจึงไม่ได้กำหนดพฤติกรรมเฉพาะเจาะจงสำหรับโครงสร้างซอร์สโค้ดที่กำหนดเสมอไป[ 2 ]การไม่กำหนดพฤติกรรมที่แน่นอนของโปรแกรมที่เป็นไปได้ทุกโปรแกรมอย่างชัดเจนนั้นไม่ถือว่าเป็นข้อผิดพลาดหรือจุดอ่อนในข้อกำหนดของภาษา และการทำเช่นนั้นก็เป็นไปไม่ได้[ 1 ]ใน ภาษา CและC++ โครงสร้างที่ไม่สามารถ พกพาได้ดังกล่าว โดยทั่วไปจะถูกจัดกลุ่มเป็นสามประเภท ได้แก่ พฤติกรรมที่กำหนดโดยการใช้งาน พฤติกรรมที่ไม่ระบุ และพฤติกรรมที่ไม่กำหนด[ 3 ]

คำจำกัดความที่แน่นอนของพฤติกรรมที่ไม่ระบุนั้นแตกต่างกันไป ใน C++ นิยามไว้ว่า "พฤติกรรมสำหรับโครงสร้างโปรแกรมที่ถูกต้องและข้อมูลที่ถูกต้อง ซึ่งขึ้นอยู่กับการใช้งาน" [ 4 ]มาตรฐาน C++ ยังระบุด้วยว่าโดยทั่วไปแล้วจะมีการให้ช่วงของพฤติกรรมที่เป็นไปได้[ 4 ]ซึ่งแตกต่างจากพฤติกรรมที่กำหนดโดยการใช้งาน ไม่มีข้อกำหนดให้การใช้งานต้องบันทึกพฤติกรรมของตน[ 4 ]ในทำนองเดียวกัน มาตรฐาน C นิยามว่าเป็นพฤติกรรมที่มาตรฐาน "ให้ความเป็นไปได้สองอย่างขึ้นไปและไม่มีข้อกำหนดเพิ่มเติมว่าควรเลือกอันใดในแต่ละกรณี" [ 5 ] พฤติกรรมที่ไม่ระบุนั้นแตกต่างจากพฤติกรรมที่ไม่กำหนดซึ่งอย่างหลังมักเป็นผลมาจากโครงสร้างโปรแกรมหรือข้อมูลที่ผิดพลาด และไม่มีข้อกำหนดใด ๆ เกี่ยวกับการแปลหรือการดำเนินการของโครงสร้างดังกล่าว[ 6 ]

พฤติกรรมที่กำหนดโดยการใช้งาน

ภาษา C และ C++ แยกความแตกต่าง ระหว่าง พฤติกรรมที่กำหนดโดยการใช้งาน (implementation-defined behavior ) กับพฤติกรรมที่ไม่ระบุ (unspecified behavior) สำหรับพฤติกรรมที่กำหนดโดยการใช้งานนั้น ผู้พัฒนาโปรแกรมจะต้องเลือกพฤติกรรมเฉพาะและบันทึกไว้ ตัวอย่างใน C/C++ คือขนาดของชนิดข้อมูลจำนวนเต็ม การเลือกพฤติกรรมต้องสอดคล้องกับพฤติกรรมที่บันทึกไว้ในการทำงานของโปรแกรมนั้นๆ

ตัวอย่าง

ลำดับการประเมินนิพจน์ย่อย

ภาษาโปรแกรมหลายภาษาไม่ได้ระบุลำดับการประเมินนิพจน์ย่อยของนิพจน์ ที่สมบูรณ์ ความไม่แน่นอนนี้อาจช่วยให้การใช้งานที่เหมาะสมที่สุดสำหรับแพลตฟอร์มเฉพาะ เช่น เพื่อใช้ประโยชน์จากการประมวลผลแบบขนาน หากนิพจน์ย่อยหนึ่งหรือมากกว่านั้นมีผลข้างเคียงผลลัพธ์ของการประเมินนิพจน์ทั้งหมดอาจแตกต่างกันไปขึ้นอยู่กับลำดับการประเมินนิพจน์ย่อย[ 1 ]ตัวอย่างเช่น กำหนดให้

a = f ( b ) + g ( b );

โดยที่fและgทั้งคู่จะแก้ไขbผลลัพธ์ที่เก็บไว้ในaอาจแตกต่างกันขึ้นอยู่กับว่าf(b)หรือg(b)ถูกประเมินก่อน[ 1 ]ในภาษา C และ C++ สิ่งนี้ยังใช้กับอาร์กิวเมนต์ของฟังก์ชันด้วย ตัวอย่าง: [ 2 ]

#include <iostream> int f () { std :: cout << "In f \n " ; return 3 ; }int g () { std :: cout << "In g \n " ; return 4 ; }int sum ( int i , int j ) { return i + j ; }int main () { return sum ( f (), g ()); }

โปรแกรมที่ได้จะเขียนเอาต์พุตสองบรรทัดในลำดับที่ไม่ระบุ[ 2 ]ในภาษาอื่นๆ บางภาษา เช่นJavaลำดับการประเมินตัวถูกดำเนินการและอาร์กิวเมนต์ของฟังก์ชันจะถูกกำหนดไว้อย่างชัดเจน[ 7 ]

ดูเพิ่มเติม

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Unspecified_behavior&oldid=1315998534 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ พฤติกรรมที่ไม่ระบุ

ใน การเขียน โปรแกรม คอมพิวเตอร์ พฤติกรรมที่ไม่ระบุ คือพฤติกรรมที่อาจแตกต่างกันไปในการใช้งาน ภาษาโปรแกรม ที่แตกต่างกัน โปรแกรมอาจกล่าวได้ว่ามีพฤติกรรมที่ไม่ระบุเมื่อ ซอร์สโค้ด ของ...

คำนิยาม

เพื่อให้คอมไพเลอร์สามารถสร้างโค้ดที่เหมาะสมที่สุดสำหรับแพลตฟอร์มเป้าหมายของตน มาตรฐานภาษาโปรแกรมจึงไม่ได้กำหนดพฤติกรรมเฉพาะเจาะจงสำหรับโครงสร้างซอร์สโค้ดที่กำหนดเสมอไป [ 2 ]...

พฤติกรรมที่กำหนดโดยการใช้งาน

ภาษา C และ C++ แยกความแตกต่าง ระหว่าง พฤติกรรมที่กำหนดโดยการใช้งาน (implementation-defined behavior ) กับพฤติกรรมที่ไม่ระบุ (unspecified behavior) สำหรับพฤติกรรมที่กำหนดโดยการใช้งานนั้น ผู้พัฒนาโปรแกรมจะต้องเลือกพฤติกรรมเฉพาะและบันทึกไว้ ตัวอย่างใน C/C++...

ลำดับการประเมินนิพจน์ย่อย

ภาษาโปรแกรมหลายภาษาไม่ได้ระบุลำดับการประเมินนิพจน์ย่อยของ นิพจน์ ที่สมบูรณ์ ความไม่แน่นอนนี้อาจช่วยให้การใช้งานที่เหมาะสมที่สุดสำหรับแพลตฟอร์มเฉพาะ เช่น เพื่อใช้ประโยชน์จากการประมวลผลแบบขนาน หากนิพจน์ย่อยหนึ่งหรือมากกว่านั้นมี ผลข้างเคียง...