الشبكة العربية لمطوري الألعاب

خبير مدير همام البهنسي مشاركة 1

لاحظت في المثال التالي من C++ أن التابع الرئيسي (main function) معرف بحيث يعيد عدد صحيح (int)، ولكن الغريب أنه لا توجد تعليمة return.

#include 

int main ()
{
  std::cout << "Hello World! ";
}

ماهو التفسير لهذه الظاهرة؟

مبتدئ  mohamed samir مشاركة 2

3.6.1 Main function
....
2 An implementation shall not predefine the main function. This function shall not be overloaded. It shall have a return type of type int, but otherwise its type is implementation-defined. All implementations shall allow both of the following definitions of main:
int main() { /* ... */ }
and
int main(int argc, char* argv[]) { /* ... */ }
.... and it continues to add ...
5 A return statement in main has the effect of leaving the main function (destroying any objects with automatic storage duration) and calling exit with the return value as the argument. If control reaches the end of main without encountering a return statement, the effect is that of executing return 0;

3D-Artist/Programmer
http://www.youtube.com/watch?v=DvHvsfrQGyc
http://www.youtube.com/watch?v=PBSeyo9WHwM

خبير مدير وسام البهنسي مشاركة 3

بمعنى آخر... في هذه الحالة ستكون القيمة المرجعة 0 للإجراء main، وربما غير محددة لإجراءات أخرى وقد تختلف من مترجم لآخر. إضافة إلى ذلك، أعتقد أن المترجم سيصدر تحذيراً لهذه الحالة... لذا يفضل تفادي الموقف ☺

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

خبير مدير همام البهنسي مشاركة 4

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