The debate surrounding the use of #define to redefine keywords in C preprocessors has raised questions about standards conformance. This article delves into the issue to provide a clear understanding of the permissibility and consequences of such a practice.
Can a Standards-Conforming Preprocessor Allow Keyword Redefinition?
Yes, a standards-conforming C preprocessor allows the use of #define to redefine language keywords. However, it is not mandated by the standard.
Must a Standards-Conforming Preprocessor Allow Keyword Redefinition?
No, the standard does not require a conforming preprocessor to allow keyword redefinition. However, the standard does restrict the use of macros that redefine names declared or defined in included standard headers.
Consequences of Redefining Keywords
While a preprocessor may allow keyword redefinition, it does not make the resulting program standards compliant. Redefining keywords can lead to compilation errors or unexpected behavior due to conflicts with the original keyword syntax and semantics.
Specific Guidelines
In C 0x, there was a proposal to outright forbid keyword redefinition, but this has not been implemented. The relevant standard text merely warns against defining macros for names that are lexically identical to keywords in translation units that include standard headers.
Conclusion
While it is possible to use #define to redefine keywords in C preprocessors, doing so comes at the cost of standards compliance for the resulting program. It is crucial to avoid redefining keywords to ensure compatibility and reliability in C code.
The above is the detailed content of Can a C Preprocessor Redefine Keywords, and What Are the Consequences?. For more information, please follow other related articles on the PHP Chinese website!