PDA

View Full Version : سوال: تعریف ثوابت برای استفاده در توابع عضو کلاس



mohamad1370
جمعه 29 فروردین 1393, 17:51 عصر
سلام در بعضی از کتابخونه ها، توابع مربوط به کتابخونه ثوابتی رو به عنوان آرگومان می گیرند می خوام بدونم این ثوابت رو چطور میشه تعریف کرد.
مثلا کتابخونه opengl تابع

begin(GL_LINE)

begin(GL_QUADS)
این
GL_LINE و GL_QUADS چطور تعریف میشن ؟تووی خیلی از کتابخونه ها همچین ثوابتی هست من فقط میخوام نحوه تعریفشون رو یاد بگیرم

rahnema1
جمعه 29 فروردین 1393, 22:48 عصر
سلام
با استفاده از دستور پیش پردازش define می شه انجام داد مثلا

#define GL_LINE 1

mohamad1370
شنبه 30 فروردین 1393, 22:50 عصر
سورس یک کتابخونه رو دیدم همینطور بود و یک سری اعداد به صورت هگز واسشون تعریف شده بود چرا؟ چون معمولا این ثوابت تووی یه switch بررسی میشن و فقط خود ثابت بررسی میشه نه مقدارش پس این مقادیر صرفا به خاطر جلوگیری از خطای برنامه است؟و چرا هگز انتخاب شدن و رویه خاصی برای تعیین این مقدارها وجود داره؟

مثلا تیکه کد زیر هیچ استفاده ایی از مقادیر نشده

#define MM 0x22222
#define NN 0x22221
int f1(int target)
{
switch (target)
{
case MM :
return 2*2 ;
case NN :
return 3*3 ;
}
}


int main()
{
std::cout << f1(NN);
return 0;

}

rahnema1
شنبه 30 فروردین 1393, 23:47 عصر
بیشتر به خاطر خوانایی بیشتر این کار صورت می گیره و یک اسم به اون عدد میدن
اینکه چرا هگز هست این هم یک دلیلش خوانایی بیشتر نسبت به مبنای 10 هست مخصوصا در کارهای گرافیکی که با مقادیر پیکسل کار داریم، هگز خوانایی بیشتری داره .
همچنین از دید یک کد نویس هگز را راحت تر میشه به باینری تبدیل کرد تا عدد مبنای ده. مثلا با یک نگاه به یک عدد هگز میشه مقدار باینری اون را به صورت ذهنی حساب کرد ولی اگه عدد مبنای ده باشه مشکله
بعضی وقتها این اعداد به صورت ماسک استفاده میشن و مقدار دهی آنها بر این اساسه
بعضی وقتها هم ممکنه دلیل خاصی نداشته باشه و صرفا یک سری مقادیر باشه جهت دسته بندی عملیات . که مثلا اعدادی که دو رقم اول اونها 2 باشه مربوط به یک سری اعمال باشن و مثلا اعدادی که دو رقم اول اونها 3 باشه مربوط به یک سری عملیات دیگه

در این لینک هم در این مورد بحث شده
http://stackoverflow.com/questions/10920432/why-use-hexadecimal-constants