I work on a codebase that uses a strange dialect of C++ --- it includes many new "keywords", annotations, and so on that are #defined away when we compile so that we produce working code. cc-mode doesn't benefit from these saving preprocessor macros, however, and becomes confused by these annotations. e.g., _Success_(return == TRUE) BOOL Foo( _In_ DWORD Blah ) { ... } Until now, I've hacked up my copy of cc-mode to understand our syntax, but this approach isn't sustainable because I inevitably fall behind cc-mode trunk. I have an idea for an alternative that might be generally useful instead: 1. We can define a text property, cc-ignore, that cc-mode will look for when it's about to read a symbol from the buffer. When it finds this property, it'll skip over all characters until the text property disappears again. Then, a minor mode can make itself responsible for identifying all non-standard constructs in a cc-mode buffer and mark them with cc-ignore so that cc-mode's parsing engine handles the syntactically-valid remainder of the buffer. 2. Create a cc-mode synonym table. My team (much to my chagrin) insists on #define struct interface, then using interface IFoo { ... }. Because "interface" behaves identically to "struct", I just tried it as "struct" in my cc-mode. I wonder whether this mechanism can be made more general. With these changes, I think cc-mode could be made to work for a greater variety of C dialects. Any thoughts?