انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

اوبونتو ۲۴٫۰۴ با پشتیبانی بلند مدّت (۱۲ سال) منتشر شد 🎉

نویسنده موضوع: اشاره گر ها و انواع آن  (دفعات بازدید: 382 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین learner:~$

  • High Sr. Member
  • *
  • ارسال: 544
  • جنسیت : پسر
  • روزی روزه گاری در گنو/لینوکس
اشاره گر ها و انواع آن
« : 01 فروردین 1403، 10:44 ب‌ظ »
درود

یکی از مشکلاتی که من در زبان سی دارم ( و شاید هم همه ) اشاره گر ها هستند. اشاره گر ها در ابتدا خیلی معقول به نظر میرسند. اما وقتی وارد توابع پیشرفت میشید یا با مفاهیم پیشرفته آشنا میشید؛دیگه به معقول نیستند.

من چند تا ایراد اساسی دارم و امیدارم که منو راهنمایی کنید که در مورد اشاره گر ها هستند ( نه اشاره گر از نوع ساختمان یا یونیون )‌و عبارت از :
۱- اشاره گر به اشاره گر مثلا:
int **ptr
که به دابل پوینتر هم معروفه ولی ما اشاره گر به اشاره گر اشاره گر هم داریم ( میگید نه؟؟! )‌:

https://www.geeksforgeeks.org/c-pointer-to-pointer-double-pointer/


https://www.geeksforgeeks.org/chain-of-pointers-in-c-with-examples/

البته تابع اشاره گر هم هست ولی اون تا حدی برطرف شد ( خیلی خوشم اومد از تابع اشاره گر )
۲-اشاره گر از نوع ثابت:
این یکی واقعا وحشتناکه چون خیلی شبیه به همه مثلا :
const char *ptr_name
cahr *const ptr_name
const char * const var_name
البته مثل همیشه جستجو کردم ( تو یوتیوب ویدیو های خیلی خوبی بود ولی بازم نفهیمدم:(  )

https://www.youtube.com/watch?v=dh5r3wSkOCg


https://www.youtube.com/watch?v=egvGq3WSF9Y


https://www.youtube.com/watch?v=m2tUIfiUqGs

البته باز هم ایراد دارم ولی نمیخوام همش رو باهم بفهمم.میخوام آروم آروم بفهمم ولی عمیق یاد بگیرم.

« آخرین ویرایش: 01 فروردین 1403، 10:51 ب‌ظ توسط learner:~$ »
مثل سمی کالونم( ; ).
خواستار پایان.
محکوم به کامپایل.

آفلاین انگلستان

  • High Hero Member
  • *
  • ارسال: 2219
  • جنسیت : پسر
  • GOD SAVE THE KING/QUEEN
پاسخ : اشاره گر ها و انواع آن
« پاسخ #1 : 01 فروردین 1403، 11:21 ب‌ظ »
برای اینکه اشاره گر هارو بفهمی باید با اونا خیلی کار کنی و بفهمی که ptr میشه آدرس اون چیزی که بهش اشاره میشه و ptr* میشه مقداری که بهش اشاره میشه.
باید بفهمی که یک رشته و آرایه ها همشون درحقیقت  اشاره گر ثابتن.
مثلا برای تمرین میتونی از شکل اشاره گری آرایه ها در برنامه هات استفاده کنی.
مثلا char **argv میشه یک آرایه دوبعدی کاراکتری یا یک آرایه یک بعدی اشاره گری که به متغیر های از نوع کاراکتری اشاره میکنه.

اینجور چیزا در کاتابا خوب توضیح داده شده.

نقل‌قول
خیلی خوشم اومد از تابع اشاره گر
کل قدرت توابع string.h از همینه.

درستش
fun(&ch);

char *fun( const char *ptr)
یا، (کسی از زیری استفاده نمیکنه.)
const char * ptr

تا از اینا زیاد استفاده نکنی متوجهشون نمیشی.
« آخرین ویرایش: 01 فروردین 1403، 11:58 ب‌ظ توسط 🇬🇧United Kingdom🇬🇧 »
🇬🇧🏴󠁧󠁢󠁥󠁮󠁧󠁿🏴󠁧󠁢󠁷󠁬󠁳󠁿🏴󠁧󠁢󠁳󠁣󠁴󠁿🇬🇧

آفلاین sd70

  • Jr. Member
  • *
  • ارسال: 95
  • جنسیت : پسر
پاسخ : اشاره گر ها و انواع آن
« پاسخ #2 : 02 فروردین 1403، 12:09 ق‌ظ »
مورد اول رو بذارید با یک مثال توضیح بدم. فرض کنید یک تابع دارید که قراره حافظه تخصیص‌داده‌شده به اشاره‌گر int شما رو آزاد (free) کنه و مقدارش رو برابر با NULL قرار بده. این تابع به چنین شکلی نوشته میشه:
void free_and_null(int **ptr) {
    free(*ptr);
    *ptr = NULL;
}

مثال:
int *p = (int *)malloc(5 * sizeof(int));
free_and_null(&p);

در حالت کلی وقتی میخوایم داخل یک تابع، یک پوینتر رو به یک آدرس دیگه اشاره بدیم از این روش استفاده می‌کنیم. کلا مقدار هر چیزی رو بخوایم داخل یه تابع تغییر بدیم از آدرسش (پوینتر)‌ استفاده می‌کنیم. وقتی مقدار یه int رو بخوایم داخل یک تابع تغییر بدیم از آدرس اون int (پوینتر به اون int) استفاده می‌کنیم. به طور مشابه وقتی مقدار یک پوینتر رو بخوایم داخل یک تابع تغییر بدیم از آدرس اون پوینتر (پوینتری به اون پوینتر) استفاده می‌کنیم. به همین سادگی.

مورد ۲:
در C یک رشته (string) مجموعه‌ای ار کارکترهاست که به یک 0 ختم میشه. بعنوان مثال دو تا آرایه زیر دقیقا مقدار و ساختارشون یکیه:
char s1[] = { 'H', 'e', 'l', 'l', 'o', 0 };
char s2[] = "Hello";
printf("s1 = %s, s2 = %s\n", s1, s2);

s1 و s2 هر دو آرایه‌اند و مقدارشون رو میشه تغییر داد. مثال:
s1[0] = 'G';
s2[0] = 'M';
printf("s1 = %s, s2 = %s\n", s1, s2);

دو اشاره‌گر زیر رو در نظر بگیرید:
char *p1 = s1;
const char *p2 = s1;

p1 و p2 هر دو اشاره‌گرهایی به s1 هستند اما فرق شون اینه که p2 نمیتونه مقدار s1 رو تغییر بده. کد زیر کاملا درست عمل میکنه:
p1[0] = 'P';
اما این کد موقع کامپایل ارور میده چرا که اشاره‌گر p2 نوعش const تعریف شده و اجازه تغییر مقداری که بهش اشاره داره رو نداره:
p2[0] = 'Q';
حالا این دو مورد رو در نظر بگیرید:
char * const p3 = s1;
const char * const p4 = s1;

p3 و p4 مثل حالت قبل هر دو اشاره‌گرهایی به s1 هستند. دقیقا مثال حالت قبل p3 میتونه محتوای s1 رو تغییر بده اما p4 نمیتونه. حالا تفاوتی که این دو مورد با حالت قبل دارند اینه که این اشاره‌گر ها نمی‌تونن به متغیر دیگه‌ای اشاره داشته باشن.

در کد زیر ما میایم میگیم p1 و p2 از این به بعد به یک متغیر جدید اشاره داشته باشن و خب این کار انجام میشه:
p1 = s2;
p2 = s2;

اما کد زیر compile error میده چرا که اشاره‌گرهای p3 و p4 از نوع ثابتن و اجازه ندارن به متغیر دیگه‌ای اشاره داشته باشن:
p3 = s2;
p4 = s2;

جمع‌بندی:
  • p1 اشاره‌گریه که هم میتونه به متغیر دیگه‌ای اشاره داشته باشه هم مقدار متغیری که بهش اشاره داره رو تغییر بده
  • p2 حق تغییر مقداری که بهش اشاره داره رو نداره اما میتونه به یک متغیر دیگه اشاره کنه
  • p3 میتونه مقدار متغیری که بهش اشاره داره رو تغییر بده اما نمیتونه به متغیر دیگری اشاره کنه
  • p4 نه میتونه مقداری که بهش اشاره داره رو تغییر بده و نه به متغیر دیگه‌ای اشاره کنه
این موارد رو اگه خوب درک کردین در رابطه با string constant ها و این که چرا رشته‌ها در C به چنین شکلی نوشته میشن مطالعه کنید:
const char *str = "Hello";
پیشنهاد می‌کنم کتاب K&R رو هم بخونید.
« آخرین ویرایش: 02 فروردین 1403، 12:47 ق‌ظ توسط sd70 »

آفلاین learner:~$

  • High Sr. Member
  • *
  • ارسال: 544
  • جنسیت : پسر
  • روزی روزه گاری در گنو/لینوکس
پاسخ : اشاره گر ها و انواع آن
« پاسخ #3 : 02 فروردین 1403، 11:12 ق‌ظ »
خب من این چیزی که در مورد اشاره گر به اشاره گر فکر میکنم اینه:
دابل پوینتر اشاره گری که به حافظه یک اشاره گر؛ که داره آدرس حافظه و محتویات یک متغیر دسترسی داره.
فکر نمیکنم اینقدر ساده باشه ???
و سوالی که پیش میاد اینه که :‌
int number
int* ptr_number
int ** d_ ptr_number
number  = 10
ptr_number = &number
d_ptr_number = &ptr_number

در خط پنجم ما اشاره گر نوع اول رو (نوع ساده) برابر با آدرس number قرار دادیم ( تا اینجاش که خیلی راحته) و به محتویات اون دسترسی داریم.
در خط آخر ما یک دابل پوینتر داریم که که به اشاره گر نوع اولمون اشاره میکنه؛ که هم به آدرس اون دسترسی داره هم به محتویاتش درست؟؟
خب یعنی ما اگر مقدار دابل پوینتر رو عوض کنیم هم مقدار number  عوض میشه هم مقدار اشاره گر نوع اول؟؟/:
من مطمعنم در این حد ساده نیست!
 و اینکه دابل پوینتر ها در توابع به چه درد در توابع و پاس دادن آرگومان ها دارن؟؟‌ چرا مستقیم خود اشاره گر رو به عنوان آرگومان پاش نمیدیم؟؟‌
some_func(&variable)

و اینکه آیا میشه یک تابع  دابل پوینتر درست کرد؟؛چیزی شبیه به این رو ما داریم :
int (*pointer_func) (const char*, const char*) = strcmp
ولی آیا این هم درسته؟؟
int (**d_pointer) (const char& , const char& ) = strcmp
strcmp یک از توابع string.h  که دو رشته رو مقایسه میکنه( همین داستان اشاره گر از نوع ثابت رو از اینجا فهمیدم و کنجکاو شدم )
میخوام اول این دابل پوینتر رو بفهمم بعد به سراغ اشاره گر نوع ثابت برم.
« آخرین ویرایش: 02 فروردین 1403، 11:48 ق‌ظ توسط learner:~$ »
مثل سمی کالونم( ; ).
خواستار پایان.
محکوم به کامپایل.

آفلاین انگلستان

  • High Hero Member
  • *
  • ارسال: 2219
  • جنسیت : پسر
  • GOD SAVE THE KING/QUEEN
پاسخ : اشاره گر ها و انواع آن
« پاسخ #4 : 02 فروردین 1403، 11:50 ق‌ظ »
شما اول باید اشاره گر ثابت و اینکه رشته و آرایه ها هم در حقیقت اشاره گرنو بفهمی.
🇬🇧🏴󠁧󠁢󠁥󠁮󠁧󠁿🏴󠁧󠁢󠁷󠁬󠁳󠁿🏴󠁧󠁢󠁳󠁣󠁴󠁿🇬🇧

آفلاین sd70

  • Jr. Member
  • *
  • ارسال: 95
  • جنسیت : پسر
پاسخ : اشاره گر ها و انواع آن
« پاسخ #5 : 02 فروردین 1403، 12:19 ب‌ظ »
دابل پوینتر اشاره گری که به حافظه یک اشاره گر؛ که داره آدرس حافظه و محتویات یک متغیر دسترسی داره.
فکر نمیکنم اینقدر ساده باشه
به همین سادگیه. اشاره‌گر به یک متغیر، یعنی آدرس اون متغیر در حافظه. حالا میخواد متغیر نوعش int باشه double باشه خودش یک پوینتر باشه یا پوینتری به یک پوینتر باشه یا هر چی.
در خط آخر ما یک دابل پوینتر داریم که که به اشاره گر نوع اولمون اشاره میکنه؛ که هم به آدرس اون دسترسی داره هم به محتویاتش درست؟؟
خب یعنی ما اگر مقدار دابل پوینتر رو عوض کنیم هم مقدار number  عوض میشه هم مقدار اشاره گر نوع اول؟؟/:
چرا مستقیم خود اشاره گر رو به عنوان آرگومان پاش نمیدیم؟؟‌
مطلبی که دیشب ارسال کردم پاسخ این دو تا پرسش رو داشت.

پیشنهاد می‌کنم در خصوص Higher-order function مطالعه بکنید.
« آخرین ویرایش: 02 فروردین 1403، 12:24 ب‌ظ توسط sd70 »

آفلاین learner:~$

  • High Sr. Member
  • *
  • ارسال: 544
  • جنسیت : پسر
  • روزی روزه گاری در گنو/لینوکس
پاسخ : اشاره گر ها و انواع آن
« پاسخ #6 : 02 فروردین 1403، 01:08 ب‌ظ »
بله مطلب رو خوندم ولی منظورم اینه که در کجا ها کاربرد چطور باید از اون ها استفاده کرد؟
هرچند که منظورم یک چیز دیگه بود منظورم ساهت یک تابع دابل پوینتر بود که در پیام قبل اشاره کرده بودم.
نقل‌قول
پیشنهاد می‌کنم در خصوص Higher-order function مطالعه بکنید.
تا حالا اسمش رو هم نشنیدم منظورتون توابع vardiac نیست ( اگر درست گفته باشم)؟ الان میرم سرچه میکنم.
*رفتم مطالعه کردم.ولی من نمیخوام چیزی رو به عنواه تابع برگردونم فقط منظورم اینه که مثلا یک دابل پوینتر به یک تابع داشته باشیم.:
int (**d_ptr) (arg1, arg2) = some_func
و سوالی که پیش میاد اینه که آیا در پرانتز دوم میتونیم یک اشاره گر داشته باشیم؟ مثلا:
(*arg1, arg2*)
یه چیزی شبیه به این؛یا باید آدرس حافظه اون رو قرار بدیم؟؟ :
(arg1&, &arg2)
« آخرین ویرایش: 02 فروردین 1403، 01:16 ب‌ظ توسط learner:~$ »
مثل سمی کالونم( ; ).
خواستار پایان.
محکوم به کامپایل.

آفلاین sd70

  • Jr. Member
  • *
  • ارسال: 95
  • جنسیت : پسر
پاسخ : اشاره گر ها و انواع آن
« پاسخ #7 : 02 فروردین 1403، 01:30 ب‌ظ »
رفتم مطالعه کردم.ولی من نمیخوام چیزی رو به عنواه تابع برگردونم فقط منظورم اینه که مثلا یک دابل پوینتر به یک تابع داشته باشیم
پوینتر به تابع هم در همین دسته قرار می‌گیره.
منظورم اینه که مثلا یک دابل پوینتر به یک تابع داشته باشیم
جدای از این که چنین کاری امکان‌پذیر نیست، دقیقا قصد انجام چه کاری رو دارید و دنبال چه کاربردی هستید که باید آدرس آدرس تابع رو داشته باشید!!؟ کاربرد اشاره‌گر به تابع (function pointer) برای وقتیه که تابع callback داریم:
https://www.tutorialspoint.com/callback-function-in-c
« آخرین ویرایش: 02 فروردین 1403، 02:05 ب‌ظ توسط sd70 »

آفلاین learner:~$

  • High Sr. Member
  • *
  • ارسال: 544
  • جنسیت : پسر
  • روزی روزه گاری در گنو/لینوکس
پاسخ : اشاره گر ها و انواع آن
« پاسخ #8 : 02 فروردین 1403، 02:28 ب‌ظ »
من میخوام خیلی عمیق بشم تو سیستم عامل خیلی خیلی عمیق.میخوام سوکت نویسی هم شروع بکنم.
call-back  رو خیلی شنیدم ولی اطلاعاتی در موردش ندارم باید برم یم جستجو بکنم.میخوام زبان سی رو خیلی خیلی عمیق و دقیق یاد بگیرم.اگر کتابی هم سراغ داربد معرفی کنید.هرچند که منبع کل کتاب های برنامه نویسی رو یکجا دارم. اما وافعا خوندن پی دی اف خیلی خیلی سخته.
مثل سمی کالونم( ; ).
خواستار پایان.
محکوم به کامپایل.

آفلاین sd70

  • Jr. Member
  • *
  • ارسال: 95
  • جنسیت : پسر
پاسخ : اشاره گر ها و انواع آن
« پاسخ #9 : 02 فروردین 1403، 02:54 ب‌ظ »
اول مفاهیم پایه رو خوب یاد بگیرید بعد سراغ موارد پیچیده‌تری مثل پوینتر به فانکشن و این موارد برید. این که دنبال بدست آوردن آدرس آدرس یک تابع بودید (یک کار غیرممکن و نادرست) معنیش اینه که هنوز با این مفاهیم به خوبی آشنایی ندارید.

برای یادگیری زبان C کتاب K&R و برای یادگیری عمیق سوکت‌نویسی کتاب Hands-On Network Programming with C رو پیشنهاد میکنم

آفلاین learner:~$

  • High Sr. Member
  • *
  • ارسال: 544
  • جنسیت : پسر
  • روزی روزه گاری در گنو/لینوکس
پاسخ : اشاره گر ها و انواع آن
« پاسخ #10 : 02 فروردین 1403، 03:29 ب‌ظ »
اول مفاهیم پایه رو خوب یاد بگیرید بعد سراغ موارد پیچیده‌تری مثل پوینتر به فانکشن و این موارد برید. این که دنبال بدست آوردن آدرس آدرس یک تابع بودید (یک کار غیرممکن و نادرست) معنیش اینه که هنوز با این مفاهیم به خوبی آشنایی ندارید.

برای یادگیری زبان C کتاب K&R و برای یادگیری عمیق سوکت‌نویسی کتاب Hands-On Network Programming with C رو پیشنهاد میکنم
جفتش رو داردم!!
k&r منسوخ شده و زیاد کاربردی نیست هرچند که خیلی از مفاهیم رو توضیح داده. از جمله توابع و کتابخانه های یونیکسی. و اینکه این کتاب به درد من مبتدی نمیخوره  چون خیلی پیچیده توضیح میده/ انگار باید یه بار به صورت حرفه ای سی رو بلد باشی.
والا من یه کتاب سفارش دادم قرار بود قبل عید بیارن که نحوه سوکت نویسی در TCP/IP  رو توضیح میداد ( اثر غلامرضا تبریزی بود ).
من با این ها کار کردم و برنامه های زیادی رو با مفاهیم ابتدایی نوشتم.ولی الان حس میکنم تو بخش پیشرفته هستم( پوینتر ها و توابع و ساختار ها و یونیون ها و صف و لیست و هیپ و استک و..).
مثل سمی کالونم( ; ).
خواستار پایان.
محکوم به کامپایل.

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4777
  • جنسیت : پسر
  • masoft قدیم
پاسخ : اشاره گر ها و انواع آن
« پاسخ #11 : 02 فروردین 1403، 03:58 ب‌ظ »
k&r منسوخ شده و زیاد کاربردی نیست
فکر نمی‌کنید هنوز زوده در مورد کاربردی بودن یا منسوخ بودن یک کتاب نظر بدید؟ :)

آفلاین learner:~$

  • High Sr. Member
  • *
  • ارسال: 544
  • جنسیت : پسر
  • روزی روزه گاری در گنو/لینوکس
پاسخ : اشاره گر ها و انواع آن
« پاسخ #12 : 02 فروردین 1403، 04:38 ب‌ظ »
k&r منسوخ شده و زیاد کاربردی نیست
فکر نمی‌کنید هنوز زوده در مورد کاربردی بودن یا منسوخ بودن یک کتاب نظر بدید؟ :)
من ۲۴ ساعته در سایت ها و فروم های مختلف برنامه نویسی میگردم یا حتی یوتیوب. که اکثرشون ۲ چیز رو گفتن:

۱- برنامه نویسی به سبک k&r منسوخ شده.
۲- سینتکس k&r منسوخ شده.
درضمن من خودم این کتاب رو به صورت چاپی دارم و گاهی مطالعه میکنم.این کتاب فقط برای مرجع خوبه نه یادگیری!.( فکر کنم این مورد رو همه میدونیم)کتاب های زیادی رو زبان سی مطالعه کردم ( نه کامل فقط جزئی ) مثل:
head first c
c for absoluteBEginer
modern aproach c
practical c
deep c secrets(expert c )
c primer plus
extreme C
 و امروز دو کتاب دیگه رو دارم بررسی میکنم :
pointers in c
pointers on c 
این دو کتاب باهم فرق دارند ولی تا حد زیادی با هم اشتراک دارند.
پس فکر کنم بتونم خوب یا بد بودن یک کتاب رو متوجه بشم ???
هرچند که ka&r داستانش فرق داره و یک کتاب مقدسه ولی خب برای من مبتدی جالب نیست مگر برای کار با چند تابع مختلف.
به شخصه کتابی رو دوست دارم که از صفر صفر تا صد صد رو پوشش بده به همراه مثال ها و نکات فراوان. و کاربرد هر تابع یا کتابخانه و نحوه استفاده شون و کار با اون زبان در حوزه های مختلف.
من با کتاب خوندن به جایی نمیرسم. میخوام تمرین کنم و از پروژه های ساده به سمت سخت پیش برم. میخوام خیلی خیلی یاد بگیرم.

« آخرین ویرایش: 02 فروردین 1403، 04:48 ب‌ظ توسط learner:~$ »
مثل سمی کالونم( ; ).
خواستار پایان.
محکوم به کامپایل.

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4777
  • جنسیت : پسر
  • masoft قدیم
پاسخ : اشاره گر ها و انواع آن
« پاسخ #13 : 02 فروردین 1403، 05:50 ب‌ظ »
من ۲۴ ساعته در سایت ها و فروم های مختلف برنامه نویسی میگردم یا حتی یوتیوب.
پیشنهاد می‌کنم این زمان رو بذارید و شروع به خوندن یک کتاب، هر کتابی، در مورد سی بکنید. در حال حاضر به نظر میاد در مفاهیم پایه‌ای زبان سی مشکل دارید و به نظر نمیاد که حتا یک کتاب رو به صورت کامل خونده باشید.

آفلاین learner:~$

  • High Sr. Member
  • *
  • ارسال: 544
  • جنسیت : پسر
  • روزی روزه گاری در گنو/لینوکس
پاسخ : اشاره گر ها و انواع آن
« پاسخ #14 : 02 فروردین 1403، 06:06 ب‌ظ »
من ۲۴ ساعته در سایت ها و فروم های مختلف برنامه نویسی میگردم یا حتی یوتیوب.
پیشنهاد می‌کنم این زمان رو بذارید و شروع به خوندن یک کتاب، هر کتابی، در مورد سی بکنید. در حال حاضر به نظر میاد در مفاهیم پایه‌ای زبان سی مشکل دارید و به نظر نمیاد که حتا یک کتاب رو به صورت کامل خونده باشید.
متاسفانه نمیتونم حرف شما رو انکار کنم   :) و قبول هم دارم اما وسواس خیلی زیادی رو کتاب دارم با اون مشخصاتی که گفتم.
در حال حاضر دوتا کتاب دارم ولی میترسم باز هم کتاب بگیرم ؛ این دو کتاب عبارته از:
۱-برنامه نویسی به زبان سی اثر قمی نژاد
۲-زبان برنامه نویسی سی از قلزم (‌k&r)
که اولی رو چندین و چند بار خوندم.
اما دیگه نمیدونم چیکار کنم  ](*,) کتابی میخوام که منو راه بندازه و قویم بکنه.
البته کتاب های تخصصی زیادی در حوزه سی خوندم که در رابطه با برنامه نویسی سیستمی در گنو/لینوکس بودند؛ولی تا مفاهیم ابتدایی رو بلد نباشیم اونا بدرد نمیخورن. :'(
مثل سمی کالونم( ; ).
خواستار پایان.
محکوم به کامپایل.