ID บทความ: 000073768 ประเภทข้อมูล: การแก้ไขปัญหา การตรวจสอบครั้งล่าสุด: 14/09/2011

ผลลัพธ์ที่ไม่ถูกต้องจากการทํางานแบบลอจิกหรือแบบมีเงื่อนไขที่มี Side-Effects

สิ่งแวดล้อม

  • Intel® Quartus® II Subscription Edition
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT

    ปัญหาสำคัญ

    คำอธิบาย

    คอมไพเลอร์ C2H จะประเมินตัวถูกดําเนินการทั้งคู่ของตรรกะเสมอ (&&, ||) และแบบมีเงื่อนไข (?:) ผู้ ประกอบการ ซึ่งแตกต่างจากมาตรฐานแห่งชาติอเมริกันที่คาดหวัง พฤติกรรมของสถาบัน (ANSI) C เมื่อตัวถูกดําเนินการถูกประเมินจากซ้ายไปขวา และตัวถูกดําเนินการที่ไม่จําเป็นจะถูกข้ามไป

    ตัวอย่างเช่น ในการแสดงออก(i-- && j--) หากค่าiเป็นศูนย์ ANSI C จะไม่ประเมิน การแสดงออกทางด้านขวา (RHS) และไม่jเป็น ถูกปรับลด โดยความแตกต่าง C2H Compiler จะประเมินทั้งสองด้าน การลดจํานวนj

    การแสดงออกต่อไปนี้เป็นตัวอย่างอื่นๆ ที่อาจเป็น ได้รับผลกระทบจากปัญหานี้:

    if (i-- || j ) ...; a = ((cond == 1)? i : j );
    ความละเอียด

    ใช้การดําเนินการแบบตรรกะและแบบมีเงื่อนไขที่มีตัวดําเนินการ ไม่มีข้างเคียง การทํางานที่มีเคียงข้างประกอบด้วยขั้นตอนก่อนและหลัง การดําเนินการที่เพิ่มขึ้นและลดลง ( , --), การดําเนินการหน่วยความจํา (*, [], ., ->), และสายเรียกฟังก์ชัน

    ผลิตภัณฑ์ที่เกี่ยวข้อง

    บทความนี้จะนำไปใช้กับ 1 ผลิตภัณฑ์

    อุปกรณ์ที่ตั้งโปรแกรมได้ Intel®

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