You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: doc/contribute/coding_guidelines/index.rst
+42Lines changed: 42 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1255,6 +1255,48 @@ Related GitHub Issues and Pull Requests are tagged with the `Inclusive Language
1255
1255
.. _CAN in Automation Inclusive Language news post: https://www.can-cia.org/news/archive/view/?tx_news_pi1%5Bnews%5D=699&tx_news_pi1%5Bday%5D=6&tx_news_pi1%5Bmonth%5D=12&tx_news_pi1%5Byear%5D=2020&cHash=784e79eb438141179386cf7c29ed9438
1256
1256
.. _CAN in Automation Inclusive Language: https://can-newsletter.org/canopen/categories/
1257
1257
1258
+
1259
+
Rule A.3: Macro name collisions
1260
+
===============================
1261
+
1262
+
Severity
1263
+
--------
1264
+
1265
+
Required
1266
+
1267
+
Description
1268
+
-----------
1269
+
1270
+
Macros with commonly used names such as ``MIN``, ``MAX``, ``ARRAY_SIZE``, must
1271
+
not be modified or protected to avoid name collisions with other
1272
+
implementations. In particular, they must not be prefixed to place them in a
1273
+
Zephyr-specific namespace, re-defined using ``#undef``, or conditionally
1274
+
excluded from compilation using ``#ifndef``. Instead, if a conflict arises with
1275
+
an existing definition originating from a :ref:`module <modules>`, the module's
1276
+
code itself needs to be modified (ideally upstream, alternatively via a change
1277
+
in Zephyr's own fork).
1278
+
This rule applies to Zephyr as a project in general, regardless of the time of
1279
+
introduction of the macro or its current name in the tree. If a macro name is
1280
+
commonly used in several other well-known open source projects then the
1281
+
implementation in Zephyr should use that name. While there is a subjective and
1282
+
non-measurable component to what "commonly used" means, the ultimate goal is
1283
+
to offer users familiar macros.
1284
+
Finally, this rule applies to inter-module name collisions as well: in that case
1285
+
both modules, prior to their inclusion, should be modified to use
1286
+
module-specific versions of the macro name that collides.
1287
+
1288
+
Rationale
1289
+
---------
1290
+
1291
+
Zephyr is an RTOS that comes with additional functionality and dependencies in
1292
+
the form of modules. Those modules are typically independent projects that may
1293
+
use macro names that can conflict with other modules or with Zephyr itself.
1294
+
Since, in the context of this documentation, Zephyr is considered the central or
1295
+
main project, it should implement the non-namespaced versions of the
1296
+
macros. Given that Zephyr uses a fork of the corresponding upstream for each
1297
+
module, it is always possible to patch the macro implementation in each module
0 commit comments