ฉันได้อ่านพบว่าการแปลงตัวชี้ฟังก์ชันเป็นตัวชี้ข้อมูลและในทางกลับกันใช้งานได้กับแพลตฟอร์มส่วนใหญ่ แต่ไม่รับประกันว่าจะใช้งานได้ เหตุใดจึงเป็นเช่นนี้ ทั้งสองไม่ควรเป็นเพียงที่อยู่ในหน่วยความจำหลักดังนั้นจึงเข้ากันได้?
void
ทุกประเภทชี้ทำงานจะต้องมีการแสดงเช่นเดียวกับตัวชี้ประเภทที่จะ การแปลงตัวชี้ฟังก์ชันเป็นจะvoid *
ต้องไม่เปลี่ยนการแทนค่า void *
คุ้มค่าที่เกิดจากการแปลงดังกล่าวสามารถแปลงกลับไปที่เดิมประเภทตัวชี้ฟังก์ชั่นที่ใช้หล่ออย่างชัดเจนโดยไม่ต้องสูญเสียข้อมูล หมายเหตุ : มาตรฐาน ISO C ไม่ต้องการสิ่งนี้ แต่จำเป็นสำหรับความสอดคล้องของ POSIX
dlsym()
- สังเกตส่วนท้ายของส่วน 'การใช้งานแอปพลิเคชัน' ที่ระบุว่า: โปรดทราบว่าการแปลงจากvoid *
ตัวชี้เป็นตัวชี้ฟังก์ชันเช่นเดียวกับ: fptr = (int (*)(int))dlsym(handle, "my_function");
ไม่ได้กำหนดโดยมาตรฐาน ISO C มาตรฐานนี้กำหนดให้การแปลงนี้ทำงานได้อย่างถูกต้องในการปฏิบัติตามการนำไปใช้