سلام
در زبان C بطور کلی نباید عمق (فراخوانی تو در تو) macro (ماکرو) ها بیشتر از یه حدی معمولا 255 تا بشه.
مثال:
یه دیفاین میخوام تعریف کنم
#define TEST_1234567890 5
عمق محتوایی که داره برابر 1 هست.
یا در دیفاین زیر هم باز عمق محتوا برابر 1 هست
#define TEST_1234567890 255
یا در دیفاین زیر هم باز عمق محتوا برابر 1 هست
#define TEST_1234567890 1194966295U
یا در دیفاین زیر هم باز عمق محتوا برابر 1 هست
#define TEST_1234567890 ((((1))))
عمق محتوا برای دیفاین TEST_C باز هم میشه 1:
#define TEST_A 5
#define TEST_B 5
#define TEST_C TEST_A + TEST_B
اما اینجا عمق محتوا برای دیفاین TEST_B میشه 2:
#define TEST_A 5
#define TEST_B TEST_A
نکته: این عدد ماکسیمم عمق محتوا برای دیفاین های (یا ماکرو ها) که نوشتم 255 در عمل تا 253 تونستم بدون مشکل کامپایل کنم اما برای عمق 254 تا دیگه خطا میده.
مشکل:
در یک برنامه از حدود 700 دیفاین تو در تو استفاده شده که محتویاتشون آدرس های بخشی از Byte های حافظه فلش هستن.
نحوه تعریف هر دیفاین به این شکل هست که اولین دیفاین آدرس 0 رو گرفته و هر دیفاین جدیدی که بخواد ساخته بشه مقدار دیفاین قبلی خودش به اضافه یک رو میگیره مثلا:
#define TEST_1 (0)
#define TEST_2 (TEST_1 + 1)
#define TEST_3 (TEST_2 + 1)
.
.
.
در نرم افزار eclipse یا stm32CubeIDE با توجه به مفسری که داره میشه از بیشتر از 255 دیفاین تو در تو یا عمیق یا همون deep استفاده کرد و برنامه بدرستی کامپایل خواهد شد.
اما در نرم افزار هایی مثل Visual Studio نمیشه از دیفاین های عمیق بیشتر از 255 تا استفاده کرد و برنامه خطای زیر رو میده:
Error C1009 compiler limit: macros nested too deeply
کسی از دوستان راه حلی به ذهنش میخوره؟