c extern undefined reference [ซ้ำ]

Sep 02 2020

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

นี่คือข้อผิดพลาดเล็กน้อยของรหัส

extern double d;
int main(void) {
    d = 0;
    return 0;
}
/home/0KzRYK/ccCTD3Lf.o: In function `main':
prog.c:(.text.startup+0x3): undefined reference to `d'
collect2: error: ld returned 1 exit status

คำตอบ

1 Akim Sep 02 2020 at 20:41

ขอบคุณทุกความคิดเห็นครับ. ความผิดพลาดของฉันคือการสมมติว่ากำหนดตัวแปรในทางเดียวกับextern double d double dแต่เห็นได้ชัดว่ามันไม่

ฉันจะบอกว่านี่เป็นคุณสมบัติที่ไม่ใช้งานง่ายของภาษาอย่างน้อยสำหรับผู้เริ่มต้น (เช่นextern doubleไม่ใช่คำจำกัดความ แต่static doubleเป็น)

หลังจากความคิดเห็นของคุณฉันพบคำถามที่เกี่ยวข้องซึ่งพูดถึงสิ่งนี้อย่างตรงไปตรงมา: เหตุใดการสร้างตัวแปรโดยใช้คำประกาศ 'extern' ไม่ใช่คำจำกัดความ

MikeCAT Sep 02 2020 at 20:26

ความเข้าใจของคุณผิด externไม่สามารถกำหนดตัวแปรที่จำเป็นภายในฟังก์ชันได้ แต่ต้องกำหนดไว้ที่ใดที่หนึ่ง (อาจเป็นซอร์สไฟล์อื่น)

ตัวอย่าง:

main.c:

extern double d;
int main(void) {
    d = 0;
    return 0;
}

d.c:

double d;

รวบรวม:

gcc -o main main.c d.c