C2H ไม่รองรับการสร้างตัวเร่งความเร็วจากไฟล์ C
มีวิธีแก้ปัญหาที่จะช่วยให้คุณเรียกตัวเร่งความเร็วของคุณจากโปรแกรม C ซึ่งเกี่ยวข้องกับการย้ายฟังก์ชันที่คุณต้องการเร่งความเร็วจากไฟล์แหล่งที่มา C ไปยังไฟล์ แหล่งที่มา C เมื่อฟังก์ชั่นของคุณอยู่ในไฟล์แหล่งข้อมูล C คอมไพเลอร์ C2H สามารถ "เห็น" และแปลงเป็นตัวเร่งฮาร์ดแวร์ได้อย่างมีประสิทธิภาพ
มีขั้นตอนเพิ่มเติมที่จําเป็นสําหรับการผสมฟังก์ชัน C และ C (และไฟล์)
ห่วงโซ่เครื่องมือ GNU รองรับการเรียกฟังก์ชัน C จากโปรแกรม C (และในทางกลับกัน) ผ่านวิธีการที่กําหนดไว้อย่างดีของการตรวจสอบ อย่างชัดแจ้ง วิธีการทํางานนี้คือ จากโปรแกรม C ของคุณ คุณบอกคอมไพเลอร์ว่าฟังก์ชันใดควรเรียกว่าฟังก์ชัน C แทนที่จะเป็น C การดําเนินการนี้ทําได้โดยใช้ตัวอักษร "C" ภายนอกที่อยู่ภายในไฟล์แหล่งที่มาของ C
ตัวอย่างของการกระทําแบบ "C" ภายนอก มีดังนี้:
- การเรียกฟังก์ชัน C จากโปรแกรม C
การตั้งค่า: คุณมี ฟังก์ชัน void bar (void) ซึ่งอยู่ในไฟล์แหล่งที่มา C "bar.c" ที่คุณต้องการโทรจากไฟล์แหล่งที่มา C "foo.cpp"
โซลูชัน: เพิ่มสิ่งนี้ไปยังด้านบนของ "foo.cpp"-
Extern "C"void foo(void);
- การเรียกฟังก์ชัน C จากโปรแกรม C
การตั้งค่า: ชุดฟังก์ชันที่อาศัยอยู่ในไฟล์ต้นฉบับ C "bar.c" ที่คุณต้องการโทรจากไฟล์แหล่งที่มา C "foo.cpp"
โซลูชัน: เพียงแค่เพิ่มการจัดฟันรอบกลุ่มฟังก์ชันที่ด้านบนของคําแถลงภายนอกใน "foo.cpp"-
Extern "C" {
โมฆะ foo(void);
int foo2 (จํานวน int);
int foo3(int number1, int number2);
}
- การโทรไปที่ส่วนหัว C จากโปรแกรม C
การตั้งค่า: คุณมีชุดฟังก์ชัน C (หรือไลบรารี) ทั้งหมดในไฟล์ที่ชื่อ "bar.c" ที่คุณต้องการโทรจากโปรแกรม C "foo.c" และคุณไม่ต้องการแสดงรายการแยกตามขั้นตอนที่ #2 (ข้างต้น) คุณมีไฟล์ส่วนหัวสําหรับ "bar.c" ที่เรียกว่า "bar.h" ซึ่งประกาศอินเทอร์เฟซไปยังฟังก์ชัน
โซลูชัน: คําสั่งภายนอกยังทํางานสําหรับไฟล์ส่วนหัว... ในไฟล์ "foo.cpp" ให้ใช้คําสั่ง extern เพื่อเพิ่มไฟล์ส่วนหัว-
Extern "C" {
#include "bar.h"
}
ใช้วิธีการใดกับ C2H ดีที่สุด When ใช้คอมไพเลอร์ C2H ขอแนะนําให้ผู้ใช้ "แยก" ฟังก์ชันสําหรับการเร่งความเร็วเป็นไฟล์ของตัวเองดังนั้นการใช้ตัวอย่างแรกจึงเป็นวิธีที่ดีที่สุดในการเร่งความเร็วฟังก์ชันด้วยคอมไพเลอร์ C2H