4.1.a. All module names shall consist entirely of lowercase letters, numbers, and underscores. No spaces shall appear within the module’s header and source file names.

4.1.b. All module names shall be unique in their first 8 characters and end with suffices .h and .c for the header and source file names, respectively.

4.1.c. No module’s header file name shall share the name of a header file from the C Standard Library or C++ Standard Library. For example, modules shall not be named “stdio” or “math”.

4.1.d. Any module containing a main() function shall have the word “main” as part of its source file name.

Example: See Appendix D

Reasoning: Multi-platform development environments (e.g., Unix and Windows) are the norm rather than the exception. Mixed case names can cause problems across operating systems and are also error prone due to the possibility of similarly- named but differently-capitalized files becoming confused by human programmers.

The inclusion of “main” in a file name is an aid to code maintainers that has proven useful in projects with multiple software configurations.

Enforcement: An automated tool shall confirm that all file names that are part of a build are consistent with these rules.