View Full Version : ماکرو T__ با عملگر ##
  
meysamg_alone
یک شنبه 16 فروردین 1388, 15:07 عصر
سلام به دوستان من تازه کار هتسم اگه امکان داره یکی به من بگه که فرق این دو تا کد چیه 
#define __T(x) L##x 
#define __T(x) Lx
Nima_NF
یک شنبه 16 فروردین 1388, 20:16 عصر
اولی که با ## هست هر چیزی که x باشد را با حرف L ادغام می کند:
#define __T(x) L##x 
TCHAR* str1 = __T("My text");
//--------------
TCHAR* str2 = L"My text";
L در اینجا یعنی نوشته ما از نوع یونیکد هست، لذا باید در TCHAR ذخیره شود.
 
دومی اشتباه هست و اگر از آن استفاده کنید خطا دریافت می کنید، چون Lx در ماکرو معادل ندارد. مگر اینه منظور شما این است که Lx قبلا تعریف شده است و الآن می خواهید از آن استفاده کنید (این چیزی هست که ماکرو از Lx می فهمد)، مثلا:
int Lx = 12;
#define __T2(x) Lx
//---------
int d = __T2(5);  // 5 will be ignored
cout << d;
meysamg_alone
سه شنبه 18 فروردین 1388, 17:03 عصر
خوب اگه ما بخوایم از هر ماکرویی استفاده کنیم تویه دیفاین باید از عملگر ## استفاده کنیم اونم دوتا پشت سر هم ؟ درسته ؟ ایا حالت دیگه ای هم تویه دی فاین هست مثلا از یه عملگر دیگه اسفاده بشه به جایه ## ؟!
Nima_NF
سه شنبه 18 فروردین 1388, 17:55 عصر
وقتی از ## (فقط هم در ماکرو ها) استفاده می کنیم که می خواهیم طرف راست ## را با طرف چپ آن ادغام / merge / concat کنیم. مثلا طرف راست 2 و طرف چپ 1 و نتیجه 12 را بدهد (یعنی دو طرف را به هم بچسباند):
#define __T1( )   1##2
//-----------
int num = __T1( );
 پس اگر ماکروی مورد نظر شما به این کار نیاز ندارد اصلا از ## استفاده نمی کنیم.
#define __T1(x)  (x / 10)
#define __T2(x, y)  (x + y)
#define __T3(x, y , z)  ((x + y)/(5 + z))
meysamg_alone
چهارشنبه 19 فروردین 1388, 18:14 عصر
ممنون متوجه شدم :لبخندساده:
حسین محمدی
شنبه 26 اردیبهشت 1388, 21:29 عصر
می توان ماکرویی را تعریف کرد که مثلا حاصل
__T(x)
برابر 
"x"
شود.
البته عبارت ما جایگزین x شود.
مثلا 
__T1(Hello)
بشود.
"Hello"
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.