พิจารณารหัส "C" ต่อไปนี้:
#include<stdio.h>
main()
{
printf("func:%d",Func_i());
}
Func_i()
{
int i=3;
return i;
}
Func_i()
ถูกกำหนดในตอนท้ายของซอร์สโค้ดและไม่มีการประกาศให้ก่อนที่จะใช้main()
มัน ในเวลามากเมื่อคอมไพเลอร์เห็นFunc_i()
ในmain()
มันออกมาของและพบว่าออกmain()
Func_i()
คอมไพเลอร์อย่างใดพบว่าค่าส่งกลับโดยและให้มันไปFunc_i()
printf()
ผมยังไม่ทราบว่าคอมไพเลอร์ไม่สามารถหาประเภทผลตอบแทนFunc_i()
ของ มันโดยปกติจะใช้เวลา (คาดเดา?) ประเภทผลตอบแทนของการที่จะเป็นFunc_i()
int
นั่นคือถ้ารหัสfloat Func_i()
นั้นคอมไพเลอร์จะให้ข้อผิดพลาด: ประเภทที่ขัดแย้งFunc_i()
กัน
จากการสนทนาข้างต้นเราจะเห็นว่า:
Func_i()
คอมไพเลอร์สามารถหาค่าที่ส่งกลับโดย- หากคอมไพเลอร์สามารถค้นหาค่าที่ส่งคืนโดย
Func_i()
ออกมาmain()
และค้นหาซอร์สโค้ดเหตุใดจึงไม่พบประเภทของ Func_i () ซึ่งกล่าวถึง อย่างชัดเจน
- หากคอมไพเลอร์สามารถค้นหาค่าที่ส่งคืนโดย
คอมไพเลอร์ต้องรู้ว่า
Func_i()
เป็นประเภทลอย - นั่นเป็นสาเหตุที่ทำให้เกิดข้อผิดพลาดของประเภทที่ขัดแย้งกัน
- หากคอมไพเลอร์รู้ว่า
Func_i
เป็นประเภทลอยตัวแล้วทำไมมันยังถือว่าFunc_i()
เป็นประเภท int และให้ข้อผิดพลาดของประเภทที่ขัดแย้งกัน? ทำไมมันไม่ได้ทำให้มันกลายFunc_i()
เป็นประเภทลอย
ผมมีข้อสงสัยเช่นเดียวกันกับการประกาศตัวแปร พิจารณารหัส "C" ต่อไปนี้:
#include<stdio.h>
main()
{
/* [extern int Data_i;]--omitted the declaration */
printf("func:%d and Var:%d",Func_i(),Data_i);
}
Func_i()
{
int i=3;
return i;
}
int Data_i=4;
คอมไพเลอร์ให้ข้อผิดพลาด: 'Data_i' ไม่ได้ประกาศ (ใช้งานครั้งแรกในฟังก์ชั่นนี้)
- เมื่อคอมไพเลอร์เห็น
Func_i()
มันจะลงไปที่ซอร์สโค้ดเพื่อค้นหาค่าที่ส่งคืนโดย Func_ () ทำไมคอมไพเลอร์ไม่สามารถทำเช่นเดียวกันสำหรับตัวแปร Data_i
แก้ไข:
ฉันไม่ทราบรายละเอียดของการทำงานภายในของคอมไพเลอร์แอสเซมเบลอร์ตัวประมวลผล ฯลฯ แนวคิดพื้นฐานของคำถามของฉันคือถ้าฉันบอก (เขียน) การคืนค่าของฟังก์ชั่นในซอร์สโค้ดในที่สุดหลังจากการใช้ จากฟังก์ชั่นนั้นภาษา "C" จะอนุญาตให้คอมพิวเตอร์ค้นหาค่านั้นโดยไม่ให้ข้อผิดพลาดใด ๆ ตอนนี้ทำไมคอมพิวเตอร์ไม่สามารถค้นหาประเภทเดียวกันได้ เหตุใดจึงไม่พบประเภทของ Data_i เนื่องจากพบค่าตอบแทนของ Func_i () แม้ว่าฉันจะใช้extern data-type identifier;
คำสั่งฉันไม่ได้บอกค่าที่จะถูกส่งกลับโดยตัวระบุนั้น (ฟังก์ชั่น / ตัวแปร) หากคอมพิวเตอร์สามารถหาค่านั้นได้ทำไมถึงไม่สามารถหาประเภทนั้นได้ ทำไมเราต้องมีการประกาศล่วงหน้าเลย?
ขอขอบคุณ.
Func_i
ไม่ถูกต้อง ไม่เคยมีกฎในการประกาศตัวแปรที่ไม่ได้กำหนดโดยปริยายดังนั้นแฟรกเมนต์ที่สองจึงมีรูปแบบไม่ถูกต้องเสมอ (ใช่คอมไพเลอร์ยอมรับตัวอย่างแรกที่ยังนิ่งอยู่เพราะมันถูกต้องหากเลอะเทอะภายใต้ C89 / C90)