السلام عليكم ورحمة الله ..
لماذا نستخدم #define ؟؟
وما الفرق بينها وبين الثوابت (const) ؟؟
كلاهما يقوم بتعريف ثابث لا تستطيع تغييره
السلام عليكم ورحمة الله ..
لماذا نستخدم #define ؟؟
وما الفرق بينها وبين الثوابت (const) ؟؟
كلاهما يقوم بتعريف ثابث لا تستطيع تغييره
إذا قمت بتعريف ثابت مثلا
#define x 5
أو كتبت
const x=5;
فبرنامجك لن يتأثر أبداً وكلا الطريقتين متطابقتين ظاهريّاً ...
ولكن :::
#define لها قدرات كبيرة , هي لغة داخل اللغة .. يمكنك تعريف توابع تسمّى MACRO من خلالها ... انظر هنا مثلاً
بالنسبة لـconst انظر أيضاً
تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 7 ديسمبر 2013 في 18:29
اقتباسالسلام عليكم ورحمة الله ..
لماذا نستخدم #define ؟؟
وما الفرق بينها وبين الثوابت (const) ؟؟
كلاهما يقوم بتعريف ثابث لا تستطيع تغييره
الفرق بينهما هو أن ثوابت #define يمكن تغييرها فى أي وقت :
#define IT 10
#ifdef IT
#undef IT
#define IT 15
#endif
#define sum(a, b) (a)+(b)تم تعديل هذه المشاركة بواسطة Snack3r في 5 ديسمبر 2013 في 11:20
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
وفرق آخر هام جداً ..
{ const int q=0; #define Q 0 } q; Q;الثابت const يخضع لقواعد الرؤية المعتادة , أما #define فسيبدأ الـcompiler بالاستبدال بدءاً من لحظة التعريف ..
في الكود السابق سيعطيك error بالنسبة لـq ولكن لا شيء بالنسبة لـ Q
إذاً سيكون الملخص أن ..
#define :
متغير عام ، هناك إمكانية في تغييره ، له لغة خاصة به ، متعدد الإستعمالات
const :
متغير ، لا يمكن تغييره ، محدد (أي أنه إما عام ، وإما خاص) وأيضاً (نوعه محدد أيضاً)
شكراً لكما على الإجابة ..
تم تعديل هذه المشاركة بواسطة bahbah في 6 ديسمبر 2013 في 00:51
اقتباسمتغير ، لا يمكن تغييره ، محدد (أي أنه إما عام ، وإما خاص) وأيضاً (نوعه محدد أيضاً)
متغير، ثابت يمكن تغيير قيمته بإستخدام const_cast:
const int i = 10;*const_cast<int*>(&i) = 20;
و الله ولي التوفيق
مدونتي: C++ Tips and Tricks
C++er كتب:متغير، ثابت يمكن تغيير قيمته بإستخدام const_cast:
const int i = 10;*const_cast<int*>(&i) = 20;و الله ولي التوفيق
ولكن الجملة الثانية هي فقط التي تتغير قيمتها .. وليس المتغير الثابت i ..
فلو طبعنا الجملة الثانية كاملة .. سينتج لنا الرقم 20 ..
أما لو أردنا طباعة المتغير الثابت .. فسيبقى 10 ..
bahbah إذا كنت تسأل عن كل الفروق فالموضوع يطول .. حدد ما الذي تريده ؟
أثناء استخدامك لكود عادي فلا فرق بينهما إلا في مجالات الرؤية
أما بدقة فهناك الكثير من الفروق
مثلاً في أي مرحلة يتم إسناد الثابت .
وهل يتم حجز مكان له في الذاكرة .
والكثير من الأمور الأخرى فهل تسأل عنها كلها ؟
أنا لا أسئل طبعاً عن كل الفروق .. فما زلت في البداية :D ..
بل قد تصفحت موضوع عن الثوابت ومن الشرح قام بتعريف ثابت كـ #define وآخر كـ const ..
فأنا قلت لماذا وضع شيئين من الأساسيات والهدف واحد (تعريف ثابت) ..
فأردت السؤال ليتضح المعنى أكثر ..
وبالفعل قد إتضح من مشاركتكم
شكراً جزيلاً لكل من شارك في الموضوع :)
اقتباسولكن الجملة الثانية هي فقط التي تتغير قيمتها .. وليس المتغير الثابت i ..
الجملة الثانية تقوم بتغيير قيمة الثابت لتصبح 20 بدلا من 10.
اقتباسأنا لا أسئل طبعاً عن كل الفروق .. فما زلت في البداية
الكلمه const لها استخدامات عديده أنظر المثال التالي:
#include <iostream>
#include <string>
using std::cout;
using std::string;
const struct whatever
{
whatever() : value("string") {}
const string& get(const int dummy = 0) const
{ return value; }
private:
const string value;
} value;
int main()
{
cout << value.get() << "\n";
}المثال السابق قد يبدو للعديد غريب و بالتحديد الكلمة const الموجوده قبل struct و للعلم فإن const يتم تطبيقها على المتغير value الذى يتم تعريفه من النوع whatever.
و الله ولي التوفيق
مدونتي: C++ Tips and Tricks
هذا الموضوع مغلق.