السـلام عليكم ورحمة الله وبركاته
لو سمحتوا عندي سؤالين
الاول: مافائـده الـ Inline....
ومتى نستخدمها؟؟؟
الثاني: الـ Scope operator( :: )
هي تستخدم مع الـ Global بس برضه مافائدتها ومتى استخدمها؟؟
ومشكورين
السـلام عليكم ورحمة الله وبركاته
لو سمحتوا عندي سؤالين
الاول: مافائـده الـ Inline....
ومتى نستخدمها؟؟؟
الثاني: الـ Scope operator( :: )
هي تستخدم مع الـ Global بس برضه مافائدتها ومتى استخدمها؟؟
ومشكورين
تم تعديل هذه المشاركة بواسطة قمـ14ـر في 24 مايو 2004 في 21:26
لا إلــــــــــــــه إلا انت سبحانك إني كنت من الظالمين
استغفر الله إلذي لا إله إلا هو واتوب إلـيه
السلام عليكم ...
اختي الكريمة سوف احاول ان اساعدك في السؤال الاول ....
احتوت لغة ++C على وسيلة لتعريف الدوال و في نفس الوقت لا يتم الذهاب اليها و انما هي تاتي الى الكود الذي استدعاها ....
يطلق على هذه الدوال بالدوال الخطية Inline function فعندما يتم استدعاء هذه الدوال يتم نسخ كود الدالة (الخطية) الى مكان الاستدعاء ... و لذلك فهي تحتوي دائماً على سطر او سطرين على الاكثر ... و تستخدم كونها اسرع ....
اما السؤال الثاني .. فهل تقصدين ما فائدة المدى Global ؟؟؟ ان كان كذلك فإن تعريف البيانات على مستوى هذا النطاق يسعدنا على التعامل معها سواء من داخل الدالة الرئيسية للبرنامج او من اي دالة اخرى ضمن ملف البرنامج ... و هنا تكمن اهميتها كوني اذا اردت ان اتعامل مع متغير ما على مستوى البرنامج ككل فلن احتاج الى تعريفه داخل كل دالة تريده ... وانما سوف اعرفه مرة واحده و احدد انه من المدى Global ...
اتمنى ان اكون نفعتك و لو قليلاً ...
و السلام ،،
بنت اليمن ....
لا اله الا الله .. محمد رسول الله
(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)
يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين
هلا وعليكم السلام ورحمة الله وبركاته
هلا اختي بنت اليمن
اول شي الف شكر لكي على شرحك وردك على موضوعي:)
السؤال الاول صراحه مافهمت اجابتك عليه
والسؤال الثاني انا اقصد علامة الـ Scope
اللي تستخدم مع الـ Global
اللي هي شكله كذا ::
على العموم السؤال الثاني خلاص الحمد لله فهمته:)
ومـرة شكرا لكي ماقصرتي
جزاكي الله كل خير
تقبلي تحيـاتي
لا إلــــــــــــــه إلا انت سبحانك إني كنت من الظالمين
استغفر الله إلذي لا إله إلا هو واتوب إلـيه
السلام عليكم,
فيما يخص السؤال الأول أضن أن الأخت بنت اليمن أعطت ما يمكن قوله وسأزيد هنا بعض التوضيحات وأتمنى أن تزيد في الفهم.
لفهم هذه الأمور بدقة يجب أن نعرف كيف يقوم الكمبايلر ببناء برنامجنا فنفترض أنه عندنا السطر التالي :
a=Func(int x,int y)
وهنا نفترض أن هذا الكود عندما ننجز برنامجنا سيكون في الذاكرة رقم 1000 - رقم مثال فقط - فعندما يصل برنامجنا إلى هذه النقطة سيقوم بوضع البارمترات التي نرسلها إلى الدالة على الستاك ثم يذهب إلى المكان التي يوجد به كود الدالة والذي ربما يكون في الذاكرة 5000 وهنا سينجز البرنامج الكود في هذه المنطقة وبعدها يرجع إلى مكان بعد كود استدعاء الدالة . طبعا هذه طريقة استدعاء دالة بالطريقة العادية ومن هنا يتضح لنا أنه إذا ما استدعينا دالتنا عدة مرات فالكود الحقيقي للدالة سيكون واحدا وهو الذي افترضنا أنه في المكان 5000 .
والآن نفترض أننا سنستدعي نفس الدالة ولكن هذه المرة بطريقة inline فهنا الكمبايلر حين يبني برنامجنا سيقوم بزرع الكود الخاص بالدالة في مكان استدعائها فكما سبق إذا افترضنا أن استدعاء الدالة سيحصل في الذاكرة 1000 فإن كود الدالة سيبدء هو أيضا ابتداءا من هذه الذاكرة حيث أن البرنامج سيستمر سيره العادي كأنه لم يستدعي أية دالة ولا يحتاج الذهاب والرجوع إلى أي مكان آخر. وهنا نتوقع طبعا أنه إذا ما استدعينا الدالة عدة مرات فإننا سننسخ كود الدالة عدة مرات أيضا وهذا من شأنه أن يزيد في طول البرنامج عوض الطريقة الأولى ولكن بالمقابل فإن هذه الطريقة تكون أسرع من الأولى عند الإنجاز.
ولهذا فعادة نستعمل هذه الطريقة عندما تكون الدالة التي نريد استدعاءها قصيرة من ناحية الكود .
إلى اللقاء.
تحياتي اخي chik و صحيح العين ما تعلى على الحاجب .........
اختي قمـ14ـر ... العفو على الرغم من انك لم تستفيدي مني :)
و السلام
بنت اليمن ،،،
لا اله الا الله .. محمد رسول الله
(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)
يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين
موضوع جيد دوال ال inline
ألف شكر لكم كلكم:):):)
جزاك الله كل خير اخوي
Chik
ماقصرت
يعطيكم الف عافيه
لا إلــــــــــــــه إلا انت سبحانك إني كنت من الظالمين
استغفر الله إلذي لا إله إلا هو واتوب إلـيه
هل من مثال احد يفيدنا فيه عن
الـ Scope operator( :: )
بحيث يبين الفرق بين وجودها وعدمه وشكرا للجميع
مع أني لا استخدمها , الا انني أعتقد انها موجوده للتمكين من تسمية متغير داخلي وآخر خارجي بنفس الاسم , والاختيار بينهما عند التعامل
مثال
#include <iostream>
using namespace std;
int Variable = 100;
int main() {
int Variable = 50;
cout << "[*] Local Variable = " << Variable << endl;
cout << "[*] Global Variable = " << ::Variable << endl;
return 0;
}خرج البرنامج
[*] Local Variable = 50 [*] Global Variable = 100
استخدمنا متغير خارجي وآخر داخلي بنفس الاسم Variable
و للوصول الى المتغير الخارجي استخدمنا :: , وللوصول للداخلي لم نستخدمها
هذا الموضوع مغلق.