ฉันสามารถใช้ #include pch.h แทน #include stdafx.h เป็นส่วนหัวพรีคอมไพล์ของฉันใน Visual Studio C++ ได้หรือไม่

นี่เป็นครั้งแรกที่ฉันทำงานกับ C++ และเริ่มต้นการเขียนโค้ดอย่างเหมาะสม ฉันกำลังติดตามบทช่วยสอน C ++ บน learncpp.com และฉันใช้ Visual Studio 2017...

ในบทช่วยสอน พวกเขาเริ่มต้นด้วยคำว่า "สวัสดีชาวโลก!" รหัสและที่ด้านบนของรหัสพวกเขาใส่ #include "stdafx.h" พร้อมด้วย #include <iostream> เมื่อฉันจำลองโค้ดนี้ด้วยตัวเองและพยายามสร้างมัน ฉันได้รับข้อผิดพลาด:

C1010: การสิ้นสุดไฟล์โดยไม่คาดคิดขณะค้นหาส่วนหัวที่คอมไพล์แล้ว คุณลืมเพิ่ม #include "pch.h" ในแหล่งที่มาของคุณหรือไม่?

เมื่อดูตัวสำรวจโซลูชันของฉัน ฉันสังเกตเห็นว่าในบทช่วยสอนในแท็บส่วนหัวและไฟล์ต้นฉบับ พวกเขามีไฟล์ชื่อ "stdafx.h" และ "stdafx.cpp" แต่สำหรับฉัน ไฟล์เหล่านั้นเรียกว่า "pch.h" และ "pch .ซีพีพี"

ดังนั้นฉันจึงลองเปลี่ยนชื่อ #include "stdafx.h" เป็น #include "pch.h" และโค้ดก็ถูกสร้างขึ้นและดำเนินการได้อย่างสมบูรณ์แบบ ฉันควรจะใช้ #include "pch.h" ต่อไปสำหรับโค้ดที่เหลือหรือนี่เป็นปัญหาบางอย่าง

ขอบคุณ!


person Honesty_DEV    schedule 20.08.2018    source แหล่งที่มา
comment
สร้างโครงการว่าง และไม่สนใจ stdafx.h ไม่จำเป็นต้องมีส่วนหัวที่คอมไพล์แล้ว   -  person HSK    schedule 20.08.2018
comment
ชื่อส่วนหัวที่คอมไพล์แล้วระบุไว้ในแท็บ Project properties -› C / C++ -› Precompiled header สามารถตั้งค่าตามหน่วยการแปลได้   -  person user7860670    schedule 20.08.2018
comment
ส่วนหัวที่คอมไพล์แล้วเป็นเพียงความซับซ้อนเพิ่มเติมและแหล่งที่มาของข้อผิดพลาด สิ่งเหล่านี้ไม่มีประโยชน์ยกเว้นในโปรเจ็กต์ขนาดใหญ่เพื่อเร่งเวลาการคอมไพล์ คุณควรปิดมัน แต่เพื่อตอบคำถามของคุณ คุณสามารถใช้ชื่อใดก็ได้ที่คุณต้องการ ตราบใดที่คุณระบุชื่อนั้นในการตั้งค่าโปรเจ็กต์ของคุณ   -  person john    schedule 20.08.2018
comment
@john • โครงการของฉันใหญ่มาก การปิดส่วนหัวที่คอมไพล์แล้วจะช่วยเร่งเวลาในการคอมไพล์เร็วขึ้นประมาณ 10% หากไม่มีการวัดความเร็วที่ส่วนหัวที่คอมไพล์ไว้ล่วงหน้า (หรือช้าลง!) จะให้มา ก็ยากที่จะประเมินประโยชน์ และฉันเห็นด้วยอย่างยิ่งกับคุณเกี่ยวกับความซับซ้อนเพิ่มเติมและแหล่งที่มาของข้อผิดพลาด   -  person Eljay    schedule 20.08.2018
comment
มีผู้ตอบความคิดเห็นมากมาย แต่คำถามนี้ยังไม่มีคำตอบ   -  person Khouri Giordano    schedule 20.08.2018


คำตอบ (3)


ชื่อส่วนหัวที่คอมไพล์ดีฟอลต์คือ stdafx.h มาหลายปีแล้ว ล่าสุดด้วย VS 2017 พวกเขาเปลี่ยนชื่อเริ่มต้นที่วิซาร์ดโปรเจ็กต์สร้างเป็น pch.h ฉันไม่รู้ว่าทำไมแต่พวกเขาก็ทำมัน

คุณสามารถปรับเปลี่ยนชื่อของไฟล์ส่วนหัวที่คอมไพล์แล้วได้ในคุณสมบัติของโปรเจ็กต์ภายใต้คุณสมบัติการกำหนดค่า -> C/C++ -> ส่วนหัวที่คอมไพล์แล้ว คุณยังสามารถเปิดหรือปิดการใช้งานได้จากที่นั่น คุณสามารถกำหนดสิ่งนี้เป็นรายไฟล์ได้ คุณยังสามารถกำหนดค่าไฟล์ Precompiled Header หลายไฟล์ในโปรเจ็กต์เดียวได้

ดังนั้นสำหรับคำถามที่เป็นรูปธรรมของคุณ: จะไม่มีปัญหาใดๆ ที่จะแทนที่ stdafx.h ด้วย pch.h ในบทช่วยสอนของคุณ บทช่วยสอนนี้อาจเก่ากว่าและยังไม่ได้รับการอัปเดต

person marc40000    schedule 12.09.2018
comment
คำตอบที่ดีที่สุดที่นี่ การพิจารณาว่า OP นั้นใหม่สำหรับ C ++ ที่จมอยู่กับความซับซ้อนของส่วนหัวในช่วงต้นนี้อาจไม่ใช่แนวทางที่ดี ฉันลงเรือลำเดียวกับมือใหม่และตระหนักดีว่าจนกว่าฉันจะไปถึงบทนั้นในหนังสือเรียนของฉัน ควรใช้ Console Wizard จะดีกว่า - person dc3rd; 03.11.2018
comment
ฉันพบข้อผิดพลาดที่คล้ายกัน และหลังจากอ่านคำตอบนี้ ฉันปิดการใช้งาน pch คำถามของฉันคือปิดการใช้งานมันไม่เป็นอันตรายหรือไม่? - person Franky; 01.01.2019
comment
@Franky: ด้วย pchs คุณสามารถปรับเวลาการสร้างโค้ดของคุณให้เหมาะสม นั่นคือทั้งหมดที่ การเปิดใช้งานหรือปิดใช้งานจะไม่ทำให้โค้ดของคุณเสื่อมลงในทางอื่น - person marc40000; 04.01.2019
comment
เนื่องจาก *afx เป็นมาตรฐาน MFC และควรจะตายไปแล้ว - person Marc.2377; 10.09.2019
comment
หากโค้ดของคุณไม่ซับซ้อนมากนักและไม่มีไลบรารี่ภายนอกจำนวนมากที่ใช้ส่วนหัวที่คอมไพล์แล้ว อาจทำให้เวลาในการคอมไพล์นานขึ้นได้ คุณลักษณะนี้จะมีประโยชน์มากที่สุดหากคุณมีโค้ดหลายพันบรรทัดและมีการขึ้นต่อกันของส่วนหัวจำนวนมาก ทำให้การสร้างโค้ดของคุณใช้เวลาไม่กี่นาที - person drescherjm; 29.04.2020

ลองย้าย "#include pch.h" ไปที่ด้านบนสุดของไฟล์ (ก่อนส่วนหัวอื่นๆ)

คอมไพเลอร์บางตัวจะไม่คอมไพล์เนื้อหาก่อนไฟล์ส่วนหัวที่คอมไพล์ไว้ล่วงหน้าตามค่าเริ่มต้น การตั้งค่านี้สามารถเปลี่ยนแปลงได้

person user3579754    schedule 04.10.2018
comment
ขอบคุณ แม้ว่าจะรวมอยู่ด้วย แต่ฉันก็ต้องย้ายมันไปไว้ด้านบน - person FindOutIslamNow; 13.11.2018

ในบทช่วยสอนของ Learncpp.com ผู้สอนแนะนำให้เราปิดตัวเลือกเพิ่มเติม "Precompiled Header" เมื่อสร้างโปรเจ็กต์ C++ ใหม่โดยใช้ตัวเลือก Windows Desktop Wizard บน Visual Studio และเป็นความคิดที่ดีที่จะทำเช่นนั้นในขณะที่เรายังไม่รู้จักไฟล์ส่วนหัว

อย่างไรก็ตาม pch.h ดูเหมือนจะเป็น stdafx.h "ใหม่" ดังนั้นจึงไม่ใช่ว่าคุณสามารถใช้อันแรกแทนอันหลังได้ แต่อย่างน้อยที่สุดคุณจะต้องใช้หากเลือกตัวเลือกของ "Precompiled Header"

person ManuAlvarado22    schedule 25.12.2018