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

ما الفرق بين const و define# ?

مغلقمُجاب
بدأه bahbah في 3 ديسمبر 2013 · 9 رد · 4,150 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

لماذا نستخدم #define ؟؟

 

وما الفرق بينها وبين الثوابت (const) ؟؟

 

كلاهما يقوم بتعريف ثابث لا تستطيع تغييره

رجعت ومازال الفريق خاملاَ  :( 


 


abPuw.1.gif

#2

إذا قمت بتعريف ثابت مثلا

#define x 5

أو كتبت

const x=5;

فبرنامجك لن يتأثر أبداً وكلا الطريقتين متطابقتين ظاهريّاً ...

ولكن :::

#define لها قدرات كبيرة , هي لغة داخل اللغة .. يمكنك تعريف توابع تسمّى MACRO من خلالها ... انظر هنا مثلاً

بالنسبة لـconst انظر أيضاً

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 7 ديسمبر 2013 في 18:29

1
#3 أفضل إجابة
اقتباس

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

 

لماذا نستخدم #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

1
#4

وفرق آخر هام جداً ..

{        const int q=0;        #define Q 0    }    q;    Q;

الثابت const يخضع لقواعد الرؤية المعتادة , أما #define فسيبدأ الـcompiler بالاستبدال بدءاً من لحظة التعريف ..

في الكود السابق سيعطيك error بالنسبة لـq ولكن لا شيء بالنسبة لـ Q

1
#5

إذاً سيكون الملخص أن ..

 

#define : 

متغير عام ، هناك إمكانية في تغييره ، له لغة خاصة به ، متعدد الإستعمالات

 

const :

متغير ، لا يمكن تغييره ، محدد (أي أنه إما عام ، وإما خاص) وأيضاً (نوعه محدد أيضاً)

 

شكراً لكما على الإجابة ..

تم تعديل هذه المشاركة بواسطة bahbah في 6 ديسمبر 2013 في 00:51

رجعت ومازال الفريق خاملاَ  :( 


 


abPuw.1.gif

#6
اقتباس
متغير ، لا يمكن تغييره ، محدد (أي أنه إما عام ، وإما خاص) وأيضاً (نوعه محدد أيضاً)

متغير، ثابت يمكن  تغيير قيمته بإستخدام const_cast:

const int i = 10;*const_cast<int*>(&i) = 20;

و الله ولي التوفيق

2

مدونتي: C++ Tips and Tricks

#7
C++er كتب:

متغير، ثابت يمكن  تغيير قيمته بإستخدام const_cast:

const int i = 10;*const_cast<int*>(&i) = 20;

و الله ولي التوفيق

 

 

ولكن الجملة الثانية هي فقط التي تتغير قيمتها .. وليس المتغير الثابت i ..

 

فلو طبعنا الجملة الثانية كاملة .. سينتج لنا الرقم 20 ..

 

أما لو أردنا طباعة المتغير الثابت .. فسيبقى 10 ..

1 −1

رجعت ومازال الفريق خاملاَ  :( 


 


abPuw.1.gif

#8

bahbah إذا كنت تسأل عن كل الفروق فالموضوع يطول .. حدد ما الذي تريده ؟

أثناء استخدامك لكود عادي فلا فرق بينهما إلا في مجالات الرؤية

أما بدقة فهناك الكثير من الفروق

مثلاً في أي مرحلة يتم إسناد الثابت .

وهل يتم حجز مكان له في الذاكرة .

والكثير من الأمور الأخرى فهل تسأل عنها كلها ؟

#9

أنا لا أسئل طبعاً عن كل الفروق .. فما زلت في البداية  :D  ..

 

بل قد تصفحت موضوع عن الثوابت ومن الشرح قام بتعريف ثابت كـ #define وآخر كـ const ..

 

فأنا قلت لماذا وضع شيئين من الأساسيات والهدف واحد (تعريف ثابت) ..

 

فأردت السؤال ليتضح المعنى أكثر ..

 

وبالفعل قد إتضح من مشاركتكم

 

شكراً جزيلاً لكل من شارك في الموضوع  :)

رجعت ومازال الفريق خاملاَ  :( 


 


abPuw.1.gif

#10
اقتباس
ولكن الجملة الثانية هي فقط التي تتغير قيمتها .. وليس المتغير الثابت 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.

 

و الله ولي التوفيق

1

مدونتي: C++ Tips and Tricks

هذا الموضوع مغلق.

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