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

17
ฉันจะใช้ extern เพื่อแชร์ตัวแปรระหว่างไฟล์ต้นฉบับได้อย่างไร
ฉันรู้ว่าตัวแปรทั่วโลกใน C บางครั้งมีexternคำหลัก คืออะไรexternตัวแปร? การประกาศเป็นอย่างไร ขอบเขตคืออะไร สิ่งนี้เกี่ยวข้องกับการแชร์ตัวแปรข้ามไฟล์ต้นฉบับ แต่มันทำงานอย่างไรอย่างแม่นยำ? ฉันจะใช้externที่ไหน

1
“ FOUNDATION_EXPORT” กับ“ extern”
ฉันอยากจะถามว่าอะไรคือเหตุผลเบื้องหลังการใช้FOUNDATION_EXPORTแทนที่จะเป็นexternในโครงการObjective C ฉันได้ตรวจสอบคำถามนี้แล้วและการใช้งานFOUNDATION_EXPORTได้รับคะแนนสูงสุด 340 คะแนน (อันดับที่ 1) ในขณะที่ใช้externเพียง 74 คะแนน (อันดับที่ 2) มีใครอธิบายได้ไหม มีเหตุผลในทางปฏิบัติสำหรับการใช้FOUNDATION_EXPORTแทนexternหรือไม่? ขอบคุณ!

5
ใช้เทมเพลตภายนอก (C ++ 11)
รูปที่ 1: เทมเพลตฟังก์ชัน TemplHeader.h template<typename T> void f(); TemplCpp.cpp template<typename T> void f(){ //... } //explicit instantation template void f<T>(); main.cpp #include "TemplHeader.h" extern template void f<T>(); //is this correct? int main() { f<char>(); return 0; } นี่เป็นวิธีใช้ที่ถูกต้องextern templateหรือฉันใช้คีย์เวิร์ดนี้เฉพาะกับเทมเพลตคลาสดังรูปที่ 2 รูปที่ 2: เทมเพลตคลาส TemplHeader.h template<typename T> class foo { T …
116 c++  templates  c++11  extern 

6
extern inline ทำอะไร?
ฉันเข้าใจว่าinlineโดยตัวมันเองเป็นข้อเสนอแนะของคอมไพเลอร์และตามดุลยพินิจของมันอาจหรือไม่อาจอินไลน์ฟังก์ชันและมันจะสร้างรหัสออบเจ็กต์ที่เชื่อมโยงได้ด้วย ฉันคิดว่าstatic inlineมันเหมือนกัน (อาจหรืออาจไม่อินไลน์ก็ได้) แต่จะไม่สร้างโค้ดออบเจ็กต์ที่เชื่อมโยงได้เมื่ออินไลน์ (เนื่องจากไม่มีโมดูลอื่นที่สามารถเชื่อมโยงไปได้) สถานที่ที่ไม่extern inlineเหมาะสมลงในภาพหรือไม่ สมมติว่าฉันต้องการแทนที่มาโครตัวประมวลผลล่วงหน้าด้วยฟังก์ชันอินไลน์และต้องการให้ฟังก์ชันนี้อินไลน์ (เช่นเนื่องจากใช้มาโคร__FILE__และ__LINE__มาโครที่ควรแก้ไขสำหรับผู้เรียก แต่ไม่ใช่ฟังก์ชันที่เรียกว่านี้) นั่นคือฉันต้องการเห็นข้อผิดพลาดของคอมไพเลอร์หรือตัวเชื่อมโยงในกรณีที่ฟังก์ชันไม่ได้รับการอินไลน์ ไม่extern inlineทำเช่นนี้? (ฉันคิดว่าถ้าไม่เป็นเช่นนั้นจะไม่มีวิธีใดที่จะบรรลุพฤติกรรมนี้นอกจากการยึดติดกับมาโคร) มีความแตกต่างระหว่าง C ++ และ C หรือไม่? มีความแตกต่างระหว่างผู้จำหน่ายคอมไพเลอร์และเวอร์ชันต่างๆหรือไม่?

1
เหตุใดตัวแปร extern แบบโลคอลในบล็อกที่แตกต่างกันจึงได้รับการเชื่อมโยงที่แตกต่างกันระหว่างคอมไพเลอร์ใน c ++
ในขณะที่ฉันกำลังตรวจสอบว่ามีการเชื่อมโยงใด บ้างที่อนุญาตให้ตัวแปรท้องถิ่นภายนอกฉันพบว่าพฤติกรรมที่แตกต่างระหว่างคอมไพเลอร์ เช่นถ้าฉันทดสอบโค้ดด้านล่าง ตามที่คุณเห็นในตัวแปรข้อคิดเห็นvarมีลิงค์ต่างกัน // foo.cpp int var = 10; // external linkage // main.cpp #include <iostream> static int var = 100; // internal linkage int main() { extern int var; // internal linkage std::cout << var << std::endl; { extern int var; // g++: external linkage , clang++: internal …
12 c++  g++  clang++  extern  linkage 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.