首页 > 试题广场 >

已知宏定义: #define M y*y+3*y ,

[单选题]

已知宏定义: #define M y*y+3*y , 则表达式 s=3*M+4*M+y*M 编译预处理后的结果是

  • s=3*(y*y+3*y)+4*(y*y+3*y)+y*(y*y+3*y)
  • s=3*(y*y)+3*y+4*(y*y)+3*y+y*(y*y)+3*y
  • s=3*y*y+3*y+4*y*y+3*y+y*y*y+3*y
  • s=3*(y*y)+(3*y)+4*(y*y)+(3*y)+y*(y*y)+(3*y)
推荐
选C。考察的是宏定义编译前作替换, 在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。即:y*y+3*y表达式去置换所有的宏名M
  1. 宏定义M的字符串: #define M y*y+3*y 
  2.  表达式:s=3*M+4*M+y*M 
  3.  替换后:s=3*y*y+3*y+4*y*y+3*y+y*y*y+3*y
定义宏没有括号,所以A、B、D错误。
编辑于 2019-07-16 14:16:26 回复(0)
答案:C
#define宏定义是在预处理时进行简单的文字替换,不进行类型检查等,因此选C
发表于 2019-07-15 15:10:03 回复(0)
宏定义没有括号
发表于 2021-03-08 15:09:55 回复(0)
#define宏定义是在预处理时进行简单的文字替换,不进行类型检查等,因此选C
发表于 2022-04-08 09:41:44 回复(0)