سؤال

كان للتو محاضرة "أساسيات البرمجة" في UNI وقيل لها إن اتفاقية استخدام/إعلان الوظائف هي الحصول على main() الوظيفة في الجزء العلوي من البرنامج ، مع الوظائف/الإجراءات التي تحتها واستخدام الإعلانات الأمامية لمنع أخطاء التحويل البرمجي.

ومع ذلك ، لقد قمت بذلك دائمًا في الاتجاه الآخر - وظائف في الأعلى main() في الأسفل وعدم استخدام إعلانات إلى الأمام ولا أعتقد أنني رأيتها على خلاف ذلك.

وهو الحق؟ أم أنها أكثر حالة من التفضيلات الشخصية؟ بعض التوضيح سيكون موضع تقدير كبير.

هل كانت مفيدة؟

المحلول

قد يكون هناك الحالة عندما ترتبط وظائفك ببعضها البعض. إذا قمت ببساطة بكتابتها فوق main() دون أن تنطلق إلى الأمام ، عليك أن تطلبها حتى يعرفوا الوظائف التي يعتمدون عليها. في بعض الحالات (المراجع الدائرية) ، لن يكون من الممكن تجميعها دون إعلان إلى الأمام.

عند الإبلاغ عن الوظائف ، لن تواجه هذه المشكلة.

بالإضافة إلى ذلك عند وجود main() كوظيفة أولى ، ستنتج المزيد من التعليمات البرمجية القابلة للقراءة ، ولكن ربما يكون هذا مجرد تفضيل شخصي.
يمكن أن يكون أيضًا أكثر قابلية للقراءة لأن المبرمج الآخر لديه نظرة عامة حول الوظائف التي سيجده في الملف.

نصائح أخرى

الأمر متروك لك. شخصيا ، أنا أبقى main في الأسفل لأن الأوقات التي لديّ وظائف أخرى هناك ، فهي إما واحدة أو وظيفتين صغيرتين أو مقتطفات رمز.

في رمز حقيقي ، نأمل أن تقسم مشروعك (وجود وظائف "غير ذات صلة" متعددة في ملف أمر سيء) وهكذا main من المحتمل أن تكون وحدها في الملف. أنت فقط #include الاشياء main يحتاج إلى الحصول على الأشياء واستخدامها.

إذا كان هناك معيار ، فسيكون الحصول على إعلانات الوظيفة في ملف .h تم تضمينه. بهذه الطريقة ، لا يهم ما هو ترتيب الوظائف في الملف. أنا لا أكتب وظائف تقريبًا دون إعلان ، ويستغرق الأمر مني عندما يفعل ذلك.

هذا المعيار الأكثر احترافا من مطوري C ++ هو هذا.

  • ملفان لكل فصل: ملف الرأس (اسمه على سبيل المثال ، class.h), ، الذي يعلن فقط جميع أعضاء ووظائف البيانات في الفصل ؛ وملف التنفيذ (المسمى class.cpp في نفس المثال) ، تحتوي على تطبيقات فقط لتلك الوظائف.
  • الوظيفة الرئيسية (إذا كان الحل الخاص بك) يذهب إلى ملف مسمى ، على سبيل المثال Main.cpp كل ذلك في حد ذاته.

لا بأس في وضع فصول متعددة أو حتى البرنامج بأكمله في ملف واحد عند العمل في مشاريع المنزل أو المدارس الصغيرة. بسبب النطاق الصغير ، لا يهم حقًا كيفية طلب الفصول أو الوظائف. يمكنك أن تفعل ما هو أكثر ملاءمة لك. ولكن إذا طلب أستاذك من الطلاب اتباع معايير رمز معينة للواجب المنزلي (على سبيل المثال ، ضع MAIN () أولاً) ، فعليك اتباع هذه المعايير.

من المرجح أن يفضل هذا النهج من قبل أستاذك ، وعلى الأرجح سبب تدريسه كاتفاقية. هناك خياران هنا ، اذهب مع التدفق (أي لا تحاول التعطيل وربما يتم وضع علامة على الأشياء لأن أستاذك يشعر أنك لا تتابع "الاتفاقية") أو تشرح لها - لا يوجد أي شرط للقيام به بهذه الطريقة (أو أي طريقة أخرى) ، طالما أن نية الكود واضحة!

ترتبط النصيحة للحصول على إعلانات (النماذج الأولية للوظيفة) بشكل أكبر بـ C ثم إلى C ++ ، لأنه في C ++ لا توجد إعلانات ضمنية ، لذلك يجب أن تعلن دائمًا قبل الاستخدام. لذلك سيكون لديك بالتأكيد إعلان وظيفة واحد على الأقل وهو ليس تعريفًا إذا كان لديك عودة تتضمن أكثر من وظيفة واحدة.

بالنسبة لمشروع صغير ، استخدم أي أسلوب تريده ولكن كن متسقًا. بالنسبة لمشروع كبير ، من المحتمل أن تحتاج إلى عدة ملفات .cpp ولديها واجهات (سواء كانت فئات أو وظائف) محددة في ملفات الرأس. كن متسقًا أيضًا على الأقل داخل ملف واحد.

وآخر شيء ، هل قلت أن تكون متسقة؟

عادةً ما أستخدم النموذج الثاني لأنه يتعين عليك الحفاظ على إعلانات الوظيفة - يجب أن يكون لديهم التوقيع والاسم المناسب ، و IMO ، فهي مجرد كتابة مفرطة عندما يمكنك فقط تحديد الوظائف أولاً. لا صيانة ، لا الوقت ضائع.

أعتقد أن المبدأ الذي ينطبق هنا هو "لا تكرر نفسك". إذا كنت تستخدم إعلانًا إلى الأمام ، فأنت تكرر نفسك دون داع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top