มันเป็นการดีหรือไม่ที่จะแยกฟังก์ชั่นหลักออกจากไฟล์ของมัน?


14

เป็นการดีที่จะมีไฟล์ main.c ที่เพิ่งมีฟังก์ชั่นหลักอยู่หรือไม่และไม่มีฟังก์ชั่นอื่น ๆ เพื่อให้สามารถเชื่อมต่อฟังก์ชั่นอื่น ๆ ได้หรือไม่?

หากไม่มีกฎที่ชัดเจนเมื่อใดที่ควรทำและไม่ควรทำเมื่อใด

คำตอบ:


15

จะเป็นการดีที่ทำงานซึ่งสามารถจะคิดว่าเป็นส่วนหนึ่งของใหม่ใช้งานรหัสควรจะสร้างขึ้นในรูปแบบของห้องสมุด การทำงานที่สมดุลเป็นโปรแกรมที่ควรแยกที่main()จะอยู่

แต่main()เพียงอย่างเดียวไม่ต้องนั่งเหงา ฟังก์ชั่นที่ต้องการparse_arguments(argc,argv) ควรอยู่ในหลักแทนที่จะแยกจากกัน


7

มาตรฐานการเข้ารหัสของเรากำหนดให้ main () อยู่ใน main.c วิธีการอื่น ๆ ใน main.c มักจะเป็นตัวจัดการข้อผิดพลาดระดับสูงและฟังก์ชั่นตัวช่วยสำหรับ main (โปรดดู @Dipan คำตอบ "parse_arguments" เช่นเดียวกับ "display_help" เป็นต้น

กฎที่ดีที่จะต้องดำเนินการคือเมื่อ funcion เริ่มทำมากกว่าสนับสนุนแอปพลิเคชันที่ทำงานอยู่และเริ่มทำตรรกะทางธุรกิจก็ถึงเวลาที่มันจะออกจาก main.c


4

มีกฎสองข้อหัวแม่มือ:

  1. ผู้อ่านไม่จำเป็นต้องสงสัยว่าคุณได้ซ่อน main () ไว้ที่ใด
  2. main () ไม่ควรมีความยุ่งเหยิงที่ไม่เกี่ยวข้อง

หากต้องการใช้มาตรฐานการเข้ารหัสที่ระบุว่า main () ควรอยู่ในไฟล์ที่ชื่อว่า main.c เป็นทั้งแนวปฏิบัติที่ดีและทั่วไป ไฟล์นี้รวมถึง main () นั้นไม่ควรมีความยุ่งเหยิงที่ไม่จำเป็น

อุดมคติหลัก () และ main.c ควรประกอบด้วยสิ่งต่อไปนี้เท่านั้น

  • รวมถึงไฟล์ส่วนหัวของโปรแกรม
  • อาร์กิวเมนต์การแยกวิเคราะห์โค้ดของ argv, argc
  • บนระบบที่ไม่มีโฮสต์: การตั้งค่าการลงทะเบียนที่สำคัญการตั้งค่าตัวชี้แบบสแต็กเป็นต้น แต่เฉพาะในกรณีที่ main () เป็นจุดเข้าแรกของโปรแกรม
  • การเรียกใช้เพื่อเริ่มระบบปฏิบัติการหรือการเรียกวนรอบเครื่องของโปรแกรมหรือในระบบเดสก์ท็อปที่โฮสต์การสร้างและการเริ่มต้นของ windows ที่เกี่ยวข้องกับเธรด GUI หลัก
  • ฟังก์ชั่นภายใน (คงที่) ที่เรียกว่าจาก main () การจัดการใด ๆ ข้างต้น
  • บนระบบโฮสต์: ส่งคืน 0

1

จุดเข้าใช้งานที่สะอาดในไฟล์ที่แยกต่างหากทำให้การทำความเข้าใจและบำรุงรักษาโค้ดเป็นไปอย่างง่ายดาย ฉันมักจะมีนิสัยนี้ในการรักษาฟังก์ชั่น main () ขนาดเล็กและสั้นมากในไฟล์ที่แตกต่างจากที่เป็นต้นไปฉันสามารถติดตามขั้นตอนของโปรแกรม เพียงเพื่อความสะอาดมันเป็นการดีที่จะแยกไว้ต่างหาก

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