นับตั้งแต่ฉันรู้มาหลายปีแล้วว่าสิ่งนี้ไม่ได้สร้างข้อผิดพลาดตามค่าเริ่มต้น (อย่างน้อยใน GCC) ฉันสงสัยอยู่เสมอว่าเพราะอะไร
ฉันเข้าใจว่าคุณสามารถออกธงคอมไพเลอร์เพื่อสร้างคำเตือน แต่มันควรจะเป็นข้อผิดพลาดหรือไม่? ทำไมมันจึงสมเหตุสมผลสำหรับฟังก์ชั่นที่ไม่ใช่โมฆะไม่คืนค่าที่ถูกต้อง?
ตัวอย่างตามที่ร้องขอในความคิดเห็น:
#include <stdio.h>
int stringSize()
{
}
int main()
{
char cstring[5];
printf( "the last char is: %c\n", cstring[stringSize()-1] );
return 0;
}
... คอมไพล์
-Werror=return-type
จะถือว่าคำเตือนนั้นเป็นข้อผิดพลาด ฉันไม่สนใจคำเตือนและสองสามนาทีของความหงุดหงิดในการติดตามthis
ตัวชี้ที่ไม่ถูกต้องนำฉันมาที่นี่และข้อสรุปนี้
std::optional
ฟังก์ชั่นโดยไม่ต้องกลับมาส่งกลับตัวเลือก "ของจริง"