ปัญหาสำคัญ
คอมไพเลอร์ C2H จะประเมินตัวถูกดําเนินการทั้งคู่ของตรรกะเสมอ
(&&
, ||
) และแบบมีเงื่อนไข (?:
)
ผู้ ประกอบการ ซึ่งแตกต่างจากมาตรฐานแห่งชาติอเมริกันที่คาดหวัง
พฤติกรรมของสถาบัน (ANSI) C เมื่อตัวถูกดําเนินการถูกประเมินจากซ้ายไปขวา
และตัวถูกดําเนินการที่ไม่จําเป็นจะถูกข้ามไป
ตัวอย่างเช่น ในการแสดงออก(i-- && j--)
หากค่าi
เป็นศูนย์ ANSI C จะไม่ประเมิน
การแสดงออกทางด้านขวา (RHS) และไม่j
เป็น
ถูกปรับลด โดยความแตกต่าง C2H Compiler จะประเมินทั้งสองด้าน
การลดจํานวนj
การแสดงออกต่อไปนี้เป็นตัวอย่างอื่นๆ ที่อาจเป็น ได้รับผลกระทบจากปัญหานี้:
if (i-- || j )
...;
a = ((cond == 1)? i : j );
ใช้การดําเนินการแบบตรรกะและแบบมีเงื่อนไขที่มีตัวดําเนินการ
ไม่มีข้างเคียง การทํางานที่มีเคียงข้างประกอบด้วยขั้นตอนก่อนและหลัง
การดําเนินการที่เพิ่มขึ้นและลดลง (
, --
),
การดําเนินการหน่วยความจํา (*
, []
, ., ->
),
และสายเรียกฟังก์ชัน