Provide the maximum message size
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index cb73d1b..82aa6e4 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -2041,6 +2041,8 @@
                     yield '#endif\n'
 
             guards = {}
+            # Provide a #define of the maximum message size, which faciliates setting the size of static arrays to be the largest possible encoded message size
+            max_messagesize = max(messagesizes, key=lambda messagesize: messagesize[1].value if messagesize[1] else 0)
             for identifier, msize in messagesizes:
                 if msize is not None:
                     cpp_guard = msize.get_cpp_guard(local_defines)
@@ -2048,6 +2050,11 @@
                         guards[cpp_guard] = set()
                     guards[cpp_guard].add('#define %-40s %s' % (
                         Globals.naming_style.define_name(identifier), msize))
+
+                    if identifier == max_messagesize[0]:
+                        guards[cpp_guard].add('#define %-40s %s' % (
+                            Globals.naming_style.define_name(symbol + "_MAX_SIZE"), Globals.naming_style.define_name(identifier)))
+
                 else:
                     yield '/* %s depends on runtime parameters */\n' % identifier
             for guard, values in guards.items():
diff --git a/tests/message_sizes/dummy.c b/tests/message_sizes/dummy.c
index 767ad46..560fd09 100644
--- a/tests/message_sizes/dummy.c
+++ b/tests/message_sizes/dummy.c
@@ -4,6 +4,7 @@
 
 int main()
 {
+    PB_STATIC_ASSERT(MESSAGES2_PB_H_MAX_SIZE == xmit_size, INCORRECT_MAX_SIZE);
     return xmit_size;
 }