<<The C Programming Language>> 2nd Edition When a macro has been defined in the second form(with parameters), subsequent textual instances of the macro identifier followed by optional white space, and then by (, a sequence of tokens separated by commas, and a ) constitute a call of the macro.
standard C 98/99 不带参数的宏是object-like macro,带参数的是function-like macro。 宏定义里跟在宏名后面的lparen(左括号)是一个预处理token,引出后面的替换列表,右括号用来结束替换列表,中间插入的成对括号会被忽略。
defines a function-like macro with arguments, similar syntactically to a function call. The parameters are specified by the optional list of identifiers, whose scope extends from their declaration in the identifier list until the new-line character that terminates the #define preprocessing directive. Each subsequent instance of the function-like macro name followed by a ( as the next preprocessing token introduces the sequence of preprocessing tokens that is replaced by the replacement list in the definition (an invocation of the macro). The replaced sequence of preprocessing tokens is terminated by the matching ) preprocessing tokens. Within the sequence of preprocessing tokens making up an invocation of a function-like macro, new-line is considered a normal white-space character.