الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما الفرق بين التعريف Int والتعريف Void للدالة Main ....؟

بدأه (( عبدالله )) في 20 أغسطس 2008 · 21 رد · 19,004 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته ...

كيف احلكم اخواني ... اولاً احب ان ابشركم انه بفضل من الله ثم بردودكم ومساعداتكم وجهودكم في هذا المنتدى ... تجاوزت اصعب مرحلة بالنسبة لي وهي فهم المؤشرات ...

يعني صرت افهم فيها شوي الحين :wacko: وان شاء الله مع الأيام كل شيء يسهـل .. مع كثرة التمارين ...

سؤالي اليوم اللي ما فهمت ايضاً شرح الكتاب اللي ادرس منه ولا شرح بعض المواضيع وهو ...

لماذا بعض امرات يتم استخدام التعريف int وهذا معناتها ( حسب فهمي ) انه يرجع قيمة صحيحة ...

وبعض المرات يستخدم التعريف void .....؟

ما فائدة هذا التعريف ومتى يتم استخدامه ولماذا ... مع ذكر بعض الأمثلة اللي تفيد او تبين اهميته للاستخدام ...

وجزاكم الله خير الجزاء ...

لا إله إلا الله محمد رسول الله عليه الصلاة والسلام

سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك

سأتقن الـ ++C و
PHP إن شاء الله تعالى ...

جاري العمل على
Microsoft Sql Server و MySQL ...

 

#2

void تكون لدالة لا ترجع شئ يعنى تكون عبارة عن procedure or subroutine يعنى بعض الاجراءات فقط

مثلا الدالة swap التى وضعتها لك فى موضوع المؤشرات هذه void لأنها لا ترجع شئ

لكن انظر للمثال التالى

  1.  
  2. double add(double x, double y)
  3. {
  4. double sum ;
  5. sum = x + y;
  6. return sum;
  7. }
  8.  

هذه ليست void لأنها ترجع قيمة

#3

طيب في الدوال دائماً تكون هنالك قيمة وحدة معادة فقط ....

هل يمكن ان اعيد اكثر من قيمة من اكثر من متغير في دالة واحدة ....؟

وبعض الأمثلة تكون هنالك دالة نوعها void ( غير الـ main ) ...

طيب بما ان الدالة من نوع void لا ترجع شيء لماذا يتم استخدامهـا ؟؟؟

لا إله إلا الله محمد رسول الله عليه الصلاة والسلام

سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك

سأتقن الـ ++C و
PHP إن شاء الله تعالى ...

جاري العمل على
Microsoft Sql Server و MySQL ...

 

#4
اقتباس
طيب بما ان الدالة من نوع void لا ترجع شيء لماذا يتم استخدامهـا ؟؟؟

ممكن تكون الدالة مش حسابية ... زى swap . تساوى فى بقية اللغات subroutine او procedure

ممكن تعيد اكتر من متغير لو مثلا استخدمت if او switch ... يعنى فى كل حالة يرجع حاجة مختلفة

#5

الأخ يسأل عن معنى int و void في الدالة main و ليس غيرها على حسب عنوانه .

الدالة main من دون سبقها بشيء تكون int (الحالة الإفتراضية)و في الأخير نكتب return 0 حيث 0 يدل على إنتهاء البرنامج بنجاح غير ذلك يوجد خطأ في البرنامج و 0 يرجع للنظام حتى تعرف حالة إنتهاء البرنامج أما لو سبقنا الدالة main ب void فإن النظام لن يعرف حالة إنتهاء البرنامج .

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

#6
الأخ يسأل عن معنى int و void في الدالة main و ليس غيرها على حسب عنوانه .
الدالة main من دون سبقها بشيء تكون int (الحالة الإفتراضية)و في الأخير نكتب return 0 حيث 0 يدل على إنتهاء البرنامج بنجاح غير ذلك يوجد خطأ في البرنامج و 0 يرجع للنظام حتى تعرف حالة إنتهاء البرنامج أما لو سبقنا الدالة main ب void فإن النظام لن يعرف حالة إنتهاء البرنامج .

هذا ما كنت اريده .. جزاك الله خير الجزاء انت واخونا العزيز عمر ، والآن وضحت الفكرة والفرق بينهم بكل وضوح ...

لكـــــــــــــــــن

ما الهدف من عدم معرفة النظام بانتهــاء البرنامج ......؟

لا إله إلا الله محمد رسول الله عليه الصلاة والسلام

سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك

سأتقن الـ ++C و
PHP إن شاء الله تعالى ...

جاري العمل على
Microsoft Sql Server و MySQL ...

 

#7
اقتباس
ما الهدف من عدم معرفة النظام بانتهــاء البرنامج ......؟

أولا هذا السؤال خارج نطاق لغة ++C بحد ذاته !

--------------

ثانياً القيمة المرجعة من main يتم وضعها في باراميتر الـExitStatus الخاص بروتين اغلاق الـProcess ...

في أنظمة NT يحدد الـExitStatus بعض الاشياء (كأن يكون البرنامج تحت التنقيح debuggee) .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#8

بما انه خارج نطاق اللغة .. يعني لا عيب في عدم معرفته ^^ .. خاصة ان كنت ادرس السي++ ..

وجزاك الله خير اخوي على التوضيح ..

لا إله إلا الله محمد رسول الله عليه الصلاة والسلام

سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك

سأتقن الـ ++C و
PHP إن شاء الله تعالى ...

جاري العمل على
Microsoft Sql Server و MySQL ...

 

#9
اقتباس
هل يمكن ان اعيد اكثر من قيمة من اكثر من متغير في دالة واحدة ....؟

بالطبع يمكن بأستخدام ال & .

اقتباس
وبعض الأمثلة تكون هنالك دالة نوعها void ( غير الـ main ) ...

طيب بما ان الدالة من نوع void لا ترجع شيء لماذا يتم استخدامهـا ؟؟؟

هذا مثال بسيط

#include<iostream.h>
#include<conio.h>

void Func(int arr[10],int &evev, int &odd)
{
  for(int i=0;i<10;i++)
	 if(arr%2==0)
		evev++;
	 else 
		odd++;

}

void main()
{
 clrscr();
 int arr[10];
 cout<<" enter numbers: ";
 for (int i=0;i<10;i++)
  cin>>arr;

 cout<<endl;
 int even=0,odd=0;
 Func(arr,even,odd);
 cout<<"even = "<<even<<"  odd= "<<odd;
 getch();

}

تم تعديل هذه المشاركة بواسطة الاخير زمانه في 21 أغسطس 2008 في 10:14

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#10

يعطيني خطأ المثال ؟؟؟

ولا يحدد مكانه ... حتى عطلت كلمة void من ال main ووضعت بدالها int ورجعت قيمة صفر في النهاية حتى اشتغل ...؟

لكن ما فهمت حاجة ؟؟؟

ممكن مثال ثاني !!؟؟؟

ثم عندي سؤال .. اللي اراه ان المثال هذا والمثال الذي ادرس منه بالكتاب متقاربين ؟؟؟

هل من جديد حتى نستوعب ، وجزاك الله كل خير اخوي ..

لا إله إلا الله محمد رسول الله عليه الصلاة والسلام

سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك

سأتقن الـ ++C و
PHP إن شاء الله تعالى ...

جاري العمل على
Microsoft Sql Server و MySQL ...

 

#12

بالنسبة للسؤال الجميل الذي تفضلت به .

اقتباس
هل يمكن ان اعيد اكثر من قيمة من اكثر من متغير في دالة واحدة ....؟

نعم يمكن لك ان تتحايل على الدوال ,هناك من يستخدم الاعادة عن طريق الParameters باستخدام reference او pointer (فاكر الغثة ) :blush:

مثال سأقوم بتصميم دالة تعيد لي مربع رقم ومكعبه.

reference

void Power_R(int num,int &out2,int &out3)
{
	out2=num*num;
	out3=num*num*num;
}

pointer

void Power_P(int num,int *out2,int *out3)
{
	*out2=num*num;
	*out3=num*num*num;
}

او ان تعيد القيم على شكل مصفوفة , وهذا المفضل لدي

مثال :

int* Power_A(int num)
{
int *re=new int[2];

	re[0]=num*num;
	re[1]=num*num*num;
	return re;


}


main()
{
int *x=Power_A(3);

cout<<"2^2="<<x[0]<<endl<<"2^3="<<x[1]<<endl;
	return 0;
}

راجع رسائلك الخاصة . :blush:

تحياتي . . . :blush:

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#13

اخي الأخير زمانه ... كنت اقصد آخر رد لك .. لكن الآن تم توضيح كل اللبس اللي حصل لي من الموضوع ...

بالنسبة لهدف الموضوع فقمت فهمته ولله الحمد والفضل لله ثم لجهودكم ... (( الرسالة واضحة 100% )) ...

اما عن اعادة اكثر من قيمة فالحمد لله ايضاً فهمتها وعرفت كيف ارجع اكثر من قيمة ...

واعتقد ان اسهل هذه الطرق هي الطريقة الأولى اللي تعتمد على المرجع ... لاني اعتقد انها اسهل الطرق ...

أما اصعبها فهي المصفوفة ^^ ... لا تقول ليش ... يمكن مع الأيام استوعبها اكثر ^^ ...

على العموم جزاكم الله خير على التوضيح ... وبارك الله فيكم ..

لا إله إلا الله محمد رسول الله عليه الصلاة والسلام

سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك

سأتقن الـ ++C و
PHP إن شاء الله تعالى ...

جاري العمل على
Microsoft Sql Server و MySQL ...

 

#14

شكرا للإخوة على المعلومات

تم تعديل هذه المشاركة بواسطة Delphawi في 22 أغسطس 2008 في 20:31

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#15
اقتباس
يعطيني خطأ المثال ؟؟؟

ولا يحدد مكانه ... حتى عطلت كلمة void من ال main ووضعت بدالها int ورجعت قيمة صفر في النهاية حتى اشتغل ...؟

لأن بعض المترجمات الحديثة أصبحت تشترط وضع قيمة مرجوعة من طرف الدالة main .

تم تعديل هذه المشاركة بواسطة SIFE في 23 أغسطس 2008 في 01:57

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

#16

تعرف main يجب ان يكون int

تعريف main بvoid خطا ولايغرك عدم شكوى الcompiler

لماذا ؟

دائما عند الالتباس في شيئ نرجع للاصل

اول مثال Hello World في أول كتاب للغة منKernighan & Ritchie هو

#include <stdio.h>

int main(void)
{
	printf("hello, world\n");
	return 0;
}

حسب C99 دالة main تكون من الشكل

int main ( void )
int main ( int argc, char *argv[] )
d4baa0.gif
#17
اقتباس
تعرف main يجب ان يكون int

تعريف main بvoid خطا ولايغرك عدم شكوى الcompiler

:hmm:

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#18
الاخير زمانه كتب:
:hmm:

ماذا اخي زيد ؟

شيئ اخر لم يتطرق له السؤال: ظرورة وجود return 0;

d4baa0.gif
#19

هممممممممم ...

يا اخي والله اني شاكر لكم على المجهود الرائع ... وجزاكم الله خير ....

اهم شيء اني عرفت ان ال main ما يصير اضعهـا void في برنامجي ^^ ...

اما الباقي فـ مسموح .... <<<<<<< قاعد يتدرب على الأمثلة <<<<<< وراه مشوار طويـل ....

الله يعيني واياكم ..

لا إله إلا الله محمد رسول الله عليه الصلاة والسلام

سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك

سأتقن الـ ++C و
PHP إن شاء الله تعالى ...

جاري العمل على
Microsoft Sql Server و MySQL ...

 

#20
اقتباس
ماذا اخي زيد ؟

لم اكن اعرف المعلومة التي ذكرت ،

ان تعريف ال void main هو خطأ رغم ان الكومبايلر لا يعترض ،

و الجميل انا لا أستخدم int main ،، جميعه void main . :lol:

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#21

كلام الاخ محمد عبد العزيز لا غبار عليه ,, راجع تعريفات الـISO

3.6.1 Main function


int main() { /* ... */ }
and
int main(int argc, char* argv[]) { /* ... */ }
All implementations shall allow both of the following definitions of main:

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#22

اعتقد نسخة المترجم من مايكروسوفت هو الوحيد الذي يقبل السطر void main ؟

مواضيع مشابهة