ccmode: Macros with ;
12.2 Macros with semicolons
===========================
Macros which needn’t (or mustn’t) be followed by a semicolon when you
invoke them, “macros with semicolons”, are very common. These can cause
CC Mode to parse the next line wrongly as a ‘statement-cont’ (
Function Symbols) and thus mis-indent it.
You can prevent this by specifying which macros have semicolons. It
doesn’t matter whether or not such a macro has a parameter list:
-- User Option: c-macro-names-with-semicolon
This buffer-local variable specifies which macros have semicolons.
After setting its value, you need to call
‘c-make-macro-with-semi-re’ for it to take effect. It should be
set to one of these values:
nil
There are no macros with semicolons.
a list of strings
Each string is the name of a macro with a semicolon. Only
valid ‘#define’ names are allowed here. For example, to set
the default value, you could write the following into your
‘.emacs’:
(setq c-macro-names-with-semicolon
'("Q_OBJECT" "Q_PROPERTY" "Q_DECLARE" "Q_ENUMS"))
a regular expression
This matches each symbol which is a macro with a semicolon.
It must not match any string which isn’t a valid ‘#define’
name. For example:
(setq c-macro-names-with-semicolon
"\\<\\(CLEAN_UP_AND_RETURN\\|Q_[[:upper:]]+\\)\\>")
-- Function: c-make-macro-with-semi-re
Call this (non-interactive) function, which sets internal
variables, each time you change the value of
‘c-macro-names-with-semicolon’. It takes no arguments, and its
return value has no meaning. This function is called by CC Mode’s
initialization code.