PDA

View Full Version : ماکری تولید ترتیبی عدد



H_G_G_I
پنج شنبه 11 آبان 1391, 10:46 صبح
سلام
من یه ماکرو می خوام که هروقت استفاده می کنم عدد رو به علاوه یک کنه بر گردونه یعنی بار اول 1 بده بار دوم 2 بار سوم 3 و ..
مثلا این طوری

#define GENERATE_NUMBER(_n) /*??????*/

int n1, n2, n3;

GENERATE_NUMBER(n1); //n1 = 1
GENERATE_NUMBER(n2); //n2 = 2
GENERATE_NUMBER(n3); //n3 = 3


من اینو نوشتم ولی انگار ماکرو تو ماکرو کار نمیکنه ! نیدونم چیز دیگه به ذهنم نرسید !:ناراحت:

#define XNUM_NUM1 1
#define XNUM_NUM2 1

#define XDEFINE_ID(_n) \
#undef XNUM_NUM2 \
#define XNUM_NUM2 XNUM_NUM1 \
#undef XNUM_NUM1 \
#define XNUM_NUM1 (XNUM_NUM2+1)\
_n = XNUM_NUM1; \


:گریه:
:گریه:
:گریه:

H_G_G_I
پنج شنبه 11 آبان 1391, 11:14 صبح
اصلا حواسم نبود با تابع کارم راه افتاد .:خجالت:

short getNewID();
short getNewID()
{
static short l_n = 0;
l_n++;
return l_n;
}


البته اگه ماکرو هم دارید بدین !

omidshaman
پنج شنبه 11 آبان 1391, 11:24 صبح
گریه نکن حالا :)


#define New_adad(a) a + 1
New_adad(n);

H_G_G_I
پنج شنبه 11 آبان 1391, 13:31 عصر
گریه نکن حالا :)


#define New_adad(a) a + 1
New_adad(n);

اینو که عمه ی منم بلده ! این فقط به عددی که میدی یکی اضافه می کنه !:عصبانی++:
من می خوام هر دفعه که از این ماکرو استفاده می شد یکی اضافه کنه و برگردونه ! که با تابع کارم راه افتاد !

omidshaman
پنج شنبه 11 آبان 1391, 14:21 عصر
اینو که عمه ی منم بلده ! این فقط به عددی که میدی یکی اضافه می کنه !:عصبانی++:
من می خوام هر دفعه که از این ماکرو استفاده می شد یکی اضافه کنه و برگردونه ! که با تابع کارم راه افتاد !
اهاپس بیخیال اون سخته :لبخند:

shahmohammadi
پنج شنبه 11 آبان 1391, 19:58 عصر
سلام.
#define New_adad(a) a++

shahmohammadi
پنج شنبه 11 آبان 1391, 20:01 عصر
البته نمي شه بهش عدد ثابتي مانند 2 رو داد. و بايد متغير باشه.

omidshaman
پنج شنبه 11 آبان 1391, 21:24 عصر
سلام.
#define New_adad(a) a++
خوب اینو که منم گفتم !

Ananas
پنج شنبه 11 آبان 1391, 23:13 عصر
اینطور هم میشه :

static int LOCAL_VALUE_FOR_MACRO = 0;
#define FN_MACRO LOCAL_VALUE_FOR_MACRO++

و بعد یک مثال استفاده :
int x = FN_MACRO;
cout << x;
for (int i = 0; i < 10; i++)
{
x = FN_MACRO;
cout << x;
};

shahmohammadi
جمعه 12 آبان 1391, 02:09 صبح
خوب اینو که منم گفتم !
فرق دارند.
اگه مثلا 3 بار كد دوم رو اجرا كنيد و متغير مقدارش 5 باشه مقدار متغير ابتدا 4 بعد 5 بعد 6 مي شه.
اما كد اول هر بار 4 رو توليد مي كنه.