เครื่องหมาย #pragma มีความสำคัญอย่างไร ทำไมเราต้องมีเครื่องหมาย #pragma


279

จุดประสงค์ของ#pragmaเครื่องหมายใน Xcode คืออะไร? ตำแหน่งของพวกเขาใน.mไฟล์มีความสำคัญหรือไม่? ควร#pragmaมาก่อนคนอื่น ๆ ทั้งหมดหรือไม่

  • พวกเขาจะต้องมีอยู่?
  • สามารถเพิ่มเครื่องหมายใหม่ได้หรือไม่? ทำไมพวกเขาจะเป็นอย่างไร สาเหตุอะไร
  • มีอันตรายในการลบเครื่องหมายหรือไม่? ใครอยากจะ?

5
ตรวจสอบลิงค์: cocoasamurai.blogspot.com/2006/09/…
rptwsthi

โดยส่วนตัวฉันไม่ชอบพวกเขา อย่างจริงจังคุณต้องการที่จะคิดเกี่ยวกับที่ที่คุณต้องใช้วิธีการตลอดเวลา? มีสิ่งที่สำคัญกว่าที่จะจัดระบบเช่นให้ความสนใจกับหลักการความรับผิดชอบเดี่ยว
แบรดโธมัส

2
สำหรับภาษา swift #Pragma mark จะไม่ทำงาน ใช้ #mark หรือ #FIXME หรือ #TODO ตรวจสอบลิงค์นี้เพื่อดูข้อมูลเพิ่มเติมstackoverflow.com/a/33040068/1753005
Jayprakash Dubey

คำตอบ:


315

#pragma markคำสั่งแสดงขึ้นใน Xcode ในเมนูสำหรับการเข้าถึงวิธีการโดยตรง พวกเขาไม่มีผลกระทบต่อโปรแกรมเลย

ตัวอย่างเช่นการใช้กับ Xcode 4 จะทำให้รายการเหล่านั้นปรากฏโดยตรงใน Jump Bar

มีความพิเศษpragma mark -ซึ่งสร้างเส้น

ป้อนคำอธิบายรูปภาพที่นี่


ขอบคุณคำตอบ - คุณจะสามารถโพสต์คำตอบที่อัปเดตแล้วซึ่งแสดงให้เห็นว่าเครื่องหมาย pragma มีลักษณะอย่างไร (ในเมนูนั้นหรือที่ใดก็ตามที่อยู่ตอนนี้) ใน XCode ใหม่
user7804781

มี Python ที่เทียบเท่าหรือไม่
Edward Falk

@EdwardFalk มันเป็นแบบ IDE ดังนั้นมันขึ้นอยู่กับ IDE / text editor ของคุณจริงๆ
Michael Ozeryansky

คอมไพเลอร์ GCC ของฉันแจ้งเตือน foo.h: 52: 0: คำเตือน: ละเว้น #pragma mark [-Wunknown-pragmas] #pragma mark - ซึ่งไม่เป็นอันตรายถึงชีวิต ดังนั้น gcc อาจไม่ทราบเกี่ยวกับ '-'
Kemin Zhou

55

#pragma markใช้เพื่อแท็กกลุ่มของวิธีการต่างๆเพื่อให้คุณสามารถค้นหาและตรวจจับวิธีการได้อย่างง่ายดายจาก Jump Bar มันอาจช่วยคุณได้เมื่อไฟล์โค้ดถึง 1,000 บรรทัดและคุณต้องการค้นหาวิธีการอย่างรวดเร็วผ่านหมวดหมู่จากกล่อง Jump

ในโปรแกรมแบบยาวมันยากที่จะจดจำและค้นหาชื่อเมธอด ดังนั้นเครื่องหมาย pragmaช่วยให้คุณสามารถจัดหมวดหมู่วิธีการตามงานที่ทำ ตัวอย่างเช่นคุณแท็กบางแท็กสำหรับวิธีการดูตารางวิธีการ AlertView วิธีวิธีเริ่มต้นการประกาศ ฯลฯ

#pragma markเป็นอุปกรณ์อำนวยความสะดวกสำหรับ XCode แต่ไม่มีผลกระทบต่อรหัสของคุณ มันเพียงช่วยให้ง่ายต่อการค้นหาวิธีการในขณะที่เข้ารหัส


21

คำง่ายๆเราสามารถพูดได้ว่า #pragma mark -ใช้สำหรับการจัดหมวดหมู่วิธีการเพื่อให้คุณสามารถค้นหาวิธีการของคุณได้อย่างง่ายดาย มันมีประโยชน์มากสำหรับโครงการระยะยาว


13

เพียงแค่เพิ่มข้อมูลที่ฉันกำลังมองหา: pragma markเป็น Xcode เฉพาะดังนั้นถ้าคุณจัดการกับโครงการ C ++ ที่คุณเปิดใน IDE ที่แตกต่างกันมันจะไม่มีผลใด ๆ ยกตัวอย่างเช่นใน Qt Creator มันไม่ได้เพิ่มหมวดหมู่สำหรับวิธีการหรือสร้างคำเตือน / ข้อผิดพลาดใด ๆ

แก้ไข

#pragmaเป็นคำสั่ง preprocessor ซึ่งมาจากภาษาซี โดยมีวัตถุประสงค์คือเพื่อระบุข้อมูลที่ขึ้นกับการนำไปใช้งานกับคอมไพเลอร์ - นั่นคือแต่ละคอมไพเลอร์อาจเลือกที่จะตีความคำสั่งนี้ตามที่ต้องการ ที่กล่าวว่าจะถือว่าเป็นส่วนขยายที่ไม่เปลี่ยนแปลง / มีอิทธิพลต่อรหัสตัวเอง ดังนั้นคอมไพเลอร์ก็อาจเพิกเฉยเช่นกัน

Xcode เป็น IDE ที่ใช้ประโยชน์จาก#pragmaและใช้งานในลักษณะเฉพาะของตัวเอง ประเด็นคือ#pragmaไม่ใช่ Xcode และแม้แต่ Objective-C เจาะจง


11

เมื่อเรามีคลาสใหญ่ / ยาวพูดมากกว่า 100 คู่บรรทัดของรหัสเราไม่สามารถเห็นทุกอย่างบนหน้าจอมอนิเตอร์ดังนั้นเราไม่สามารถดูภาพรวม (เรียกว่ารายการเอกสาร) ของชั้นเรียนของเรา บางครั้งเราต้องการเห็นภาพรวมของคลาสของเรา วิธีการทั้งหมดค่าคงที่คุณสมบัติอื่น ๆ ได้อย่างรวดเร็ว คุณสามารถกด Ctrl + 6 ใน XCode เพื่อดูภาพรวมของชั้นเรียนของคุณ คุณจะได้รับ Window aka Jump Bar แบบป๊อปอัป

ตามค่าเริ่มต้นแถบกระโดดนี้ไม่มีที่เก็บข้อมูล / ส่วนใด ๆ มันเป็นเพียงรายการยาว (แม้ว่าเราจะสามารถเริ่มพิมพ์เมื่อ Jump Bar ปรากฏขึ้นและมันจะค้นหาในรายการ Jump Bar) นี่คือความต้องการของpragma mark

หากคุณต้องการสร้างส่วนต่าง ๆ ใน Jump Bar ของคุณคุณสามารถใช้เครื่องหมาย pragma พร้อมคำอธิบายที่เกี่ยวข้อง ตอนนี้ดูภาพรวมที่แนบมาในคำถาม มี 'ดูวงจรชีวิต' และ 'ส่วนเฉพาะ .. ' เป็นส่วนที่สร้างโดยpragma marks


10

ในขณะที่ค้นหา doc ให้ชี้ไปที่ว่า pragma เป็นคำสั่งของคอมไพเลอร์อย่างไรฉันก็พบบทความ NSHipster นี้ซึ่งทำงานได้ค่อนข้างดี

ฉันหวังว่าคุณจะสนุกกับการอ่าน


7
#pragma mark - NSSecureCoding

วัตถุประสงค์หลักของ "pragma" สำหรับการอ้างอิงของนักพัฒนาป้อนคำอธิบายรูปภาพที่นี่

คุณสามารถค้นหาเมธอด / ฟังก์ชั่นได้อย่างง่ายดายในสายการเข้ารหัสนับพันเส้น

Xcode 11+:

Line Marker ด้านบน

// MARK: - Properties

Line Marker ในด้านบนและล่าง

// MARK: - Properties - 

เครื่องหมายระบุตำแหน่งเฉพาะที่ด้านล่าง

// MARK: Properties -

ดังนั้นฉันสามารถลบเส้นได้หรือไม่ มันเปลืองพื้นที่สำหรับสมองของฉัน

1
การลบ# pragma-markจะไม่ส่งผลกระทบต่อการทำงานของรหัสของคุณ แต่รหัสของคุณอาจสูญเสียความสามารถในการอ่าน หากคุณไม่ต้องการคุณสามารถลบมันได้
Jeba Moses
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.