مشکل: #define های عمیقتر از 255 در زبان C

سلام
در زبان 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

کسی از دوستان راه حلی به ذهنش میخوره؟

2 پسندیده
// free-floating function
int main( int argc, char* argv[])
{
printf( "Hello, world" );
}
class HelloWorld
{
public static void main(String args[])
{
System.out.println( "Hello, World" );
}
}
<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML>
<HEAD>
<TITLE>
A Small Hello
</TITLE>
</HEAD>
<BODY>
<H1>Hi</H1>
<P>This is very minimal "hello world" HTML document.</P>
</BODY>
</HTML>
dim a as byte
' A "Hello, World!" program in Visual Basic.
Module Hello
Sub Main()
MsgBox("Hello, World!&quot![](https://www.eca.ir/forums/images/smilies/32.png "32") ' Display message on computer screen.
End Sub
End Module
section .text
global _start ;must be declared for linker (ld)

_start: ;tell linker entry point

mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel

mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel

section .data

msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string
% Author:
%
% mas
%
clc
clear all
fprintf ( 1, '\n' );
fprintf ( 1, 'HELLO:\n' );
fprintf ( 1, ' MATLAB version\n' );
fprintf ( 1, ' This is how to say:\n' );
fprintf ( 1, '\n' );
fprintf ( 1, ' Hello, world!\n' );

quit
<?php
Print "Hello, World!";
?>
<?php
Echo "Hello, World!";
?>
entity hello_world is
end;

architecture hello_world of hello_world is
begin
stimulus : process
begin
assert false report "Hello World By Deepak"
severity note;
wait;
end process stimulus;
end hello_world;
x = 1
if x == 1:
# indented four spaces
print "x is 1."
<?xml version="1.0" encoding="UTF-8"?>

<root>
<title>
My First XML Document
</title>
<para>
Hello to the wild and wooly world of electronic
document encoding.
</para>
<note>
(Okay, so maybe it's not that wild,
but it can get pretty wooly.)
</note>
<!-- No simple "Hello World" here -->
<para>
This page written by:
<ital>(insert your name here)</ital>
</para>
<para>
Copyright 2000 and beyond
</para>
</root>
.NOLIST
#define EQU .equ
#define equ .equ
#define END .end
#define end .end
#include "ti83plus.inc"
.LIST

.org 9D93h
.db $BB,$6D
ld a,0
ld (CURCOL),a
ld (CURROW),a
ld hl,text
B_CALL(_PutS)
ret
text:
.db "Hello, World!",0

.end
end