首页 > 解决方案 > 为什么这些宏定义的扩展如此不同?

问题描述

#define INC1(a) ((a)+1)

#define INC2 (a) ((a)+1)

#define INC3( a ) (( a ) + 1)

#define INC4 ( a ) (( a ) + 1)

对于 C 语言中的上述声明 INC1 和 INC3 工作正常,但 INC2 和 INC4 给出错误,为什么?

参考:https ://www.geeksforgeeks.org/c-quiz-110-gq/ 第一个问题

标签: cmacros

解决方案


类函数宏的语法要求左括号紧跟在宏名称之后,中间没有任何空格。

预处理器使用宏名称后的空格来推断宏名称何时结束并且宏的主体何时开始。

例如:

#define INC2 (a) ((a)+1)

这定义了一个函数式宏,它扩展为(a) ((a)+1).


推荐阅读