คำถามติดแท็ก header-files

28
อะไรคือความแตกต่างระหว่าง #include <filename> และ #include“ filename”
ในภาษาการเขียนโปรแกรม C และ C ++ ความแตกต่างระหว่างการใช้วงเล็บมุมและการใช้อัญประกาศในincludeคำสั่งมีดังนี้ #include &lt;filename&gt; #include "filename"

9
เหตุใดจึงมีไฟล์ส่วนหัวและไฟล์. cpp [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม &amp; คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา เหตุใด C ++ จึงมีไฟล์ส่วนหัวและไฟล์. cpp
484 c++  header-files 

13
เหตุใดฉันจึงไม่ควรรวมไฟล์ cpp และใช้ส่วนหัวแทน
ดังนั้นฉันจึงเสร็จสิ้นการมอบหมายการเขียนโปรแกรม C ++ ครั้งแรกและได้รับเกรดของฉัน including cpp files instead of compiling and linking themแต่ตามการจัดลำดับที่ฉันหายไปเครื่องหมายสำหรับ ฉันไม่ชัดเจนเกินไปในสิ่งที่หมายถึง เมื่อมองกลับไปที่รหัสของฉันฉันเลือกที่จะไม่สร้างไฟล์ส่วนหัวสำหรับชั้นเรียนของฉัน แต่ทำทุกอย่างในไฟล์ cpp (ดูเหมือนว่าจะทำงานได้ดีโดยไม่มีไฟล์ส่วนหัว ... ) ฉันคาดเดาว่านักเรียนระดับประถมหมายความว่าฉันเขียน '#include "mycppfile.cpp";' ในบางไฟล์ของฉัน เหตุผลของฉันสำหรับ#includeการรับไฟล์ cpp คือ: - ทุกสิ่งที่ควรจะเข้าไปในไฟล์ส่วนหัวนั้นอยู่ในไฟล์ cpp ของฉันดังนั้นฉันจึงแกล้งทำเป็นว่าเป็นไฟล์ส่วนหัว - ใน Monkey-see-monkey ทำแฟชั่นฉันเห็นว่าคนอื่น ๆ ไฟล์ส่วนหัวอยู่#includeในไฟล์ดังนั้นฉันจึงทำเช่นเดียวกันกับไฟล์ cpp ของฉัน แล้วฉันทำอะไรผิดและทำไมมันถึงไม่ดี?
147 c++  header-files 

2
#pragma เป็นส่วนหนึ่งของมาตรฐาน C ++ 11 หรือไม่
ตามเนื้อผ้าวิธีมาตรฐานและแบบพกพาเพื่อหลีกเลี่ยงการรวมส่วนหัวหลายรายการใน C ++ คือ / คือการใช้#ifndef - #define - #endifชุดรูปแบบคำสั่ง pre-compiler หรือที่เรียกว่าชุดรูปแบบมหภาคการ์ด (ดูตัวอย่างรหัสด้านล่าง) #ifndef MY_HEADER_HPP #define MY_HEADER_HPP ... #endif ในการใช้งานมากที่สุด / คอมไพเลอร์ (ดูภาพด้านล่าง) แต่มีอีกทางเลือก "สง่างาม" #pragma onceที่ทำหน้าที่วัตถุประสงค์เช่นเดียวกับโครงการแมโครยามที่เรียกว่า #pragma onceมีข้อดีหลายประการเมื่อเทียบกับชุดรูปแบบการป้องกันมาโครซึ่งรวมถึงรหัสน้อยกว่าการหลีกเลี่ยงการปะทะกันของชื่อและบางครั้งการปรับปรุงความเร็วในการคอมไพล์ ฉันทำการวิจัยบางอย่างฉันรู้ว่าถึงแม้#pragma onceคำสั่งจะได้รับการสนับสนุนจากคอมไพเลอร์ที่รู้จักกันเกือบทั้งหมด แต่ก็มีความขุ่นเคืองว่า#pragma onceคำสั่งนั้นเป็นส่วนหนึ่งของมาตรฐาน C ++ 11 หรือไม่ คำถาม: บางคนสามารถอธิบายได้ว่า#pragma onceคำสั่งนั้นเป็นส่วนหนึ่งของมาตรฐาน C ++ 11 หรือไม่? หากไม่ได้เป็นส่วนหนึ่งของมาตรฐาน C ++ 11 มีแผนใดบ้างในการรวมไว้ในรุ่นที่ใหม่กว่า (เช่น …

5
ไฟล์ส่วนหัวสำหรับ x86 SIMD intrinsics
ไฟล์ส่วนหัวใดที่ให้อินทรินนิกส์สำหรับส่วนขยายชุดคำสั่ง x86 SIMD (MMX, SSE, AVX, ... ) ดูเหมือนว่าจะไม่พบรายการดังกล่าวทางออนไลน์ ช่วยแก้ให้ด้วยนะถ้าฉันผิด.

9
“ การใช้เนมสเปซ” ในส่วนหัว c ++
ในหลักสูตร c ++ ทั้งหมดของเราครูทุกคนจะใส่using namespace std;หลัง#includes ลงใน.hไฟล์เสมอ สิ่งนี้ดูเหมือนว่าฉันจะเป็นอันตรายตั้งแต่นั้นมาโดยการรวมส่วนหัวนั้นไว้ในโปรแกรมอื่นฉันจะได้รับเนมสเปซที่นำเข้ามาในโปรแกรมของฉันอาจจะโดยไม่รู้ตัวตั้งใจหรือต้องการ (การรวมส่วนหัวอาจซ้อนกันได้ลึกมาก) ดังนั้นคำถามของฉันจึงเป็นสองเท่า: ฉันพูดถูกหรือusing namespaceเปล่าที่ไม่ควรใช้ในไฟล์ส่วนหัวและ / หรือมีวิธียกเลิกบางอย่างเช่น: //header.h using namespace std { . . . } อีกหนึ่งคำถามในบรรทัดเดียวกัน: ส่วนหัวควรจัดเก็บส่วนหัว#includeทั้งหมดที่.cppไฟล์นั้นต้องการเฉพาะคำถามที่จำเป็นสำหรับคำจำกัดความของส่วนหัวและปล่อยให้.cppไฟล์#includeเหลือหรือไม่มีเลยและประกาศทุกสิ่งที่ต้องการเป็นextern? เหตุผลเบื้องหลังคำถามก็เหมือนกับข้างบน: ฉันไม่ต้องการความประหลาดใจเมื่อรวม.hไฟล์ นอกจากนี้ถ้าฉันพูดถูกนี่เป็นข้อผิดพลาดทั่วไปหรือไม่ ฉันหมายถึงการเขียนโปรแกรมในโลกแห่งความเป็นจริงและในโครงการ "จริง" ที่นั่น ขอบคุณ.

10
Makefile การอ้างอิงส่วนหัว
สมมติว่าฉันมี makefile กับกฎ %.o: %.c gcc -Wall -Iinclude ... ฉันต้องการให้ * .o สร้างใหม่ทุกครั้งที่ไฟล์ส่วนหัวมีการเปลี่ยนแปลง แทนที่จะหารายการของการอ้างอิงเมื่อใดก็ตามที่ไฟล์ส่วนหัวมี/includeการเปลี่ยนแปลงอ็อบเจ็กต์ทั้งหมดใน dir จะต้องถูกสร้างใหม่ ฉันคิดวิธีที่ดีในการเปลี่ยนแปลงกฎเพื่อรองรับสิ่งนี้ไม่ได้ฉันยินดีรับข้อเสนอแนะ คะแนนโบนัสหากรายการส่วนหัวไม่จำเป็นต้องฮาร์ดโค้ด


5
C ++: Namespaces - วิธีใช้ในไฟล์ส่วนหัวและไฟล์ต้นฉบับอย่างถูกต้อง?
พิจารณาไฟล์ต้นฉบับสองไฟล์: ไฟล์ประกาศอินเตอร์เฟส ( *.hหรือ*.hpp) และไฟล์การนำไปใช้งาน ( *.cpp) ให้*.hไฟล์เป็นดังนี้: namespace MyNamespace { class MyClass { public: int foo(); }; } ฉันได้เห็นแนวทางปฏิบัติสองประการในการใช้เนมสเปซในไฟล์ต้นฉบับ: *.cpp แสดงการปฏิบัติ # 1: #include "MyClass.h" using namespace MyNamespace; int MyClass::foo() { ... } *.cpp แสดงการปฏิบัติ # 2: #include "MyClass.h" namespace MyNamespace { int MyClass::foo() { ... } } คำถามของฉัน:มีความแตกต่างระหว่างการปฏิบัติทั้งสองนี้และถือว่าดีกว่าอีกแบบหนึ่งหรือไม่?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.