c extern undefined reference [ซ้ำ]
ฉันขอโทษสำหรับสิ่งที่ฉันแน่ใจว่าเป็นความผิดพลาดง่ายๆ แต่หลังจากนั้นไม่กี่ชั่วโมงฉันก็คิดไม่ออกว่าฉันทำอะไรผิด ฉันเข้าใจว่า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
คำตอบ
ขอบคุณทุกความคิดเห็นครับ. ความผิดพลาดของฉันคือการสมมติว่ากำหนดตัวแปรในทางเดียวกับextern double d double dแต่เห็นได้ชัดว่ามันไม่
ฉันจะบอกว่านี่เป็นคุณสมบัติที่ไม่ใช้งานง่ายของภาษาอย่างน้อยสำหรับผู้เริ่มต้น (เช่นextern doubleไม่ใช่คำจำกัดความ แต่static doubleเป็น)
หลังจากความคิดเห็นของคุณฉันพบคำถามที่เกี่ยวข้องซึ่งพูดถึงสิ่งนี้อย่างตรงไปตรงมา: เหตุใดการสร้างตัวแปรโดยใช้คำประกาศ 'extern' ไม่ใช่คำจำกัดความ
ความเข้าใจของคุณผิด externไม่สามารถกำหนดตัวแปรที่จำเป็นภายในฟังก์ชันได้ แต่ต้องกำหนดไว้ที่ใดที่หนึ่ง (อาจเป็นซอร์สไฟล์อื่น)
ตัวอย่าง:
main.c:
extern double d;
int main(void) {
d = 0;
return 0;
}
d.c:
double d;
รวบรวม:
gcc -o main main.c d.c