الأولى :
وهي ## وتسمى أحيانا بمعامل الربط وهي تخبر المترجم بان تصل الToken الذي يليها بال Token الذي قبلها .. انظر إلى الكود التالي :
CODE2
#define CONCAT( a, B ) 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 ....
أما الثانية والثالثة فهما قريبان من بعضهما وهما يستخدطان حصرا في الماكرو ، بالنسبة ل @# فإذا ذكرت بعد البارامتر فإنها تستبدله بمحرف .. أما الثانية يعني # قتستبدل البارامتر ب سلسلة نصية ..
انظر إلى المثال التالي وسوف تفهم أكثر :
CODE2
#define WriteLn(x) printf(#x "n");
int main(int argc, char* argv[])
{
WriteLn(hani atassi);
return 0;
}
طبعا الكود السابق يطبع العبارة
hani atassi