عبد الله الساهر
Oct 2005, 06:21 AM
من ضخامة لغة ال ++C فإنك تقريبا تجد كل يوم شئ جديد ! فهل استخدم أحدكم من قبل معاملات المترجم ##, #, @# ..
الأولى :
وهي ## وتسمى أحيانا بمعامل الربط وهي تخبر المترجم بان تصل الToken الذي يليها بال Token الذي قبلها .. انظر إلى الكود التالي :
#define CONCAT(a, a##b
int main(int argc, char* argv[])
{
int CONCAT(test, 1) = 50;
printf("%dn", test1);
return 0;
}
في الكود السابق تلاحظ تعريف الماكرو CONCAT الذي يقوم بوصل ما يكتب في كل من بارامتراته a و b إذن فإن نتيجة الماكرو
CONCAT(test, 1)
تكون test1 ....
أما الثانية والثالثة فهما قريبان من بعضهما وهما يستخدطان حصرا في الماكرو ، بالنسبة ل @# فإذا ذكرت بعد البارامتر فإنها تستبدله بمحرف .. أما الثانية يعني # قتستبدل البارامتر ب سلسلة نصية ..
انظر إلى المثال التالي وسوف تفهم أكثر :
#define WriteLn(x) printf(#x "n");
int main(int argc, char* argv[])
{
WriteLn(abdullah essaher);
return 0;
}
طبعا الكود السابق يطبع العبارة
abdullah essaher
وانتظروني بباقي الدروس
الأولى :
وهي ## وتسمى أحيانا بمعامل الربط وهي تخبر المترجم بان تصل الToken الذي يليها بال Token الذي قبلها .. انظر إلى الكود التالي :
#define CONCAT(a, a##b
int main(int argc, char* argv[])
{
int CONCAT(test, 1) = 50;
printf("%dn", test1);
return 0;
}
في الكود السابق تلاحظ تعريف الماكرو CONCAT الذي يقوم بوصل ما يكتب في كل من بارامتراته a و b إذن فإن نتيجة الماكرو
CONCAT(test, 1)
تكون test1 ....
أما الثانية والثالثة فهما قريبان من بعضهما وهما يستخدطان حصرا في الماكرو ، بالنسبة ل @# فإذا ذكرت بعد البارامتر فإنها تستبدله بمحرف .. أما الثانية يعني # قتستبدل البارامتر ب سلسلة نصية ..
انظر إلى المثال التالي وسوف تفهم أكثر :
#define WriteLn(x) printf(#x "n");
int main(int argc, char* argv[])
{
WriteLn(abdullah essaher);
return 0;
}
طبعا الكود السابق يطبع العبارة
abdullah essaher
وانتظروني بباقي الدروس