ให้อภัยหากคำถามนี้ไร้เดียงสา พิจารณาโปรแกรมต่อไปนี้:
#include <stdio.h>
int main() {
int i = 1;
i = i + 2;
5;
i;
printf("i: %d\n", i);
}
ในตัวอย่างข้างต้นข้อความ5;และi;ดูเหมือนฟุ่มเฟือยโดยสิ้นเชิง แต่โค้ดรวบรวมโดยไม่มีคำเตือนหรือข้อผิดพลาดโดยค่าเริ่มต้น (อย่างไรก็ตาม gcc จะโยนwarning: statement with no effect [-Wunused-value]คำเตือนเมื่อวิ่งไปด้วย-Wall) พวกเขาไม่มีผลกับส่วนที่เหลือของโปรแกรมดังนั้นทำไมพวกเขาจึงพิจารณาข้อความที่ถูกต้องตั้งแต่แรก? คอมไพเลอร์ไม่สนใจพวกเขาเหรอ? มีประโยชน์ใด ๆ ในการอนุญาตข้อความดังกล่าวหรือไม่?
;หลังจากนั้น มันจะซับซ้อนภาษาเพื่อเพิ่มกฎเพิ่มเติมเกี่ยวกับเมื่อการแสดงออกไม่สามารถงบ
printf()หรือไม่ คำสั่ง5;โดยทั่วไปว่า "ทำสิ่งที่5ไม่ (อะไร) และไม่สนใจผล. คำสั่งของคุณprintf(...)คือ 'ทำสิ่งที่printf(...)ไม่และไม่สนใจผล (ค่าตอบแทนจากprintf())'. C ถือว่าผู้เดียว. นี้ยังช่วยให้รหัสเช่น(void) i;ที่iเป็น พารามิเตอร์ของฟังก์ชันที่คุณส่งไปvoidเพื่อทำเครื่องหมาย
printf()มีผลแม้ว่าคุณจะไม่สนใจค่าที่มันส่งกลับในที่สุด ในทางตรงกันข้าม5;ไม่มีผลเลย