ให้อภัยหากคำถามนี้ไร้เดียงสา พิจารณาโปรแกรมต่อไปนี้:
#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;
ไม่มีผลเลย