คำถามติดแท็ก extern-c


4
การรวม C ++ และ C - #ifdef __cplusplus ทำงานอย่างไร
ฉันกำลังทำงานในโครงการที่มีรหัสCดั้งเดิมมากมาย เราได้เริ่มเขียนใน C ++ โดยมีเจตนาที่จะแปลงรหัสดั้งเดิมในที่สุดเช่นกัน ฉันสับสนเล็กน้อยเกี่ยวกับการโต้ตอบของCและ C ++ ฉันเข้าใจว่าการห่อรหัสCด้วยextern "C"คอมไพเลอร์ C ++ จะไม่ทำให้ชื่อของรหัสCเสื่อมลงแต่ฉันไม่แน่ใจว่าจะใช้สิ่งนี้ได้อย่างไร ดังนั้นที่ด้านบนของไฟล์ส่วนหัวCแต่ละไฟล์ (หลังจากที่มียามรวม) เรามี #ifdef __cplusplus extern "C" { #endif และที่ด้านล่างเราเขียน #ifdef __cplusplus } #endif ในระหว่างสองเรามีทั้งหมดของเรารวมถึง typedefs และฟังก์ชั่นต้นแบบ ฉันมีคำถามสองสามข้อเพื่อดูว่าฉันเข้าใจสิ่งนี้ถูกต้องหรือไม่: ถ้าฉันมีไฟล์ C ++ A.hh ซึ่งรวมถึงไฟล์ส่วนหัวC Bh รวมถึงไฟล์ส่วนหัวCอีกCh วิธีนี้ทำงานอย่างไร ฉันคิดว่าเมื่อคอมไพเลอร์เข้าสู่ Bh __cplusplusจะถูกกำหนดดังนั้นมันจะล้อมโค้ดด้วยextern "C" (และ__cplusplusจะไม่ถูกกำหนดภายในบล็อกนี้) ดังนั้นเมื่อเข้าสู่ Ch แล้ว __cplusplusจะไม่ถูกกำหนดและรหัสจะไม่ถูกรวมเข้าด้วย extern "C"กัน …

9
เหตุใดฟังก์ชัน C จึงไม่สามารถเปลี่ยนชื่อได้
ฉันมีการสัมภาษณ์เมื่อเร็ว ๆ นี้และมีคำถามหนึ่งที่ถามคือการใช้extern "C"รหัส C ++ คืออะไร ฉันตอบว่ามันคือการใช้ฟังก์ชั่น C ในรหัส C ++ เนื่องจาก C ไม่ใช้ name-mangling ฉันถูกถามว่าทำไม C ถึงไม่ใช้ชื่อเล่นและพูดตามตรงว่าฉันไม่สามารถตอบได้ ฉันเข้าใจว่าเมื่อคอมไพเลอร์ C ++ รวบรวมฟังก์ชันมันตั้งชื่อพิเศษให้กับฟังก์ชันเป็นหลักเนื่องจากเราสามารถมีฟังก์ชันที่มีชื่อเดียวกันมากเกินไปใน C ++ ซึ่งต้องได้รับการแก้ไขในเวลาคอมไพล์ ใน C ชื่อของฟังก์ชันจะยังคงเหมือนเดิมหรืออาจจะมีเครื่องหมาย _ นำหน้า คำถามของฉันคือ: เกิดอะไรขึ้นกับการอนุญาตให้คอมไพเลอร์ C ++ ทำลายฟังก์ชัน C ด้วย ฉันจะเดาว่ามันไม่สำคัญว่าคอมไพเลอร์จะตั้งชื่ออะไรให้กับพวกเขา เราเรียกฟังก์ชันในลักษณะเดียวกันในภาษา C และ C ++
137 c++  c  name-mangling  extern-c 

11
ทำไมเราต้องใช้ภายนอก“ C” {#include <foo.h>} ใน C ++
ทำไมเราต้องใช้: extern "C" { #include &lt;foo.h&gt; } โดยเฉพาะ: เมื่อใดที่เราควรใช้ เกิดอะไรขึ้นในคอมไพเลอร์ / ลิงเกอร์ระดับที่ต้องการให้เราใช้มัน? วิธีการรวบรวม / เชื่อมโยงนี้จะแก้ปัญหาที่เราต้องใช้มันได้อย่างไร?

4
เรียกใช้ฟังก์ชัน C จากรหัส C ++
ฉันมีฟังก์ชัน C ที่ฉันต้องการเรียกใช้จาก C ++ ฉันไม่สามารถใช้extern "C" void foo()วิธีการแบบ "" ได้เนื่องจากฟังก์ชัน C ไม่สามารถคอมไพล์โดยใช้ g ++ แต่มันรวบรวมได้ดีโดยใช้ gcc มีความคิดอย่างไรในการเรียกใช้ฟังก์ชันจาก C ++?
93 c++  c  linux  extern-c 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.