Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: binary MIME-Version: 1.0 X-Mailer: MIME-tools 5.411 (Entity 5.404) Subject: namespace cleanliness in k5-platform.h X-RT-Original-Encoding: iso-8859-1 Content-Length: 772 k5-platform.h contains a number of instances of JOIN2(foo, __bar). This can cause a macro in the reserved namespace to get expanded. It might be better to make a macro such as #define JOINX__Y_2(x,y) x ## _ ## _ ## y #define JOINX__Y(x,y) JOINX__Y_2(x,y) or something like that, so that macros in the reserved namespace don't get expanded. The example above doesn't use x ## __ ## y because that might still invoke undefined behavior. (prefixes _[A-Z_] are reserved for any use, while prefixes _[^A-Z_] are only reserved for file scope ordinary and tag identifiers. It's conceivable, though perhaps unlikely, that an compiler vendor could implement a preprocessor extension using identifiers with a prefix of the form _[A-Z_], e.g., the __VA_ARGS__ facility in c99.)