首页 > 试题广场 >

若有宏定义:#define S(a,b) t=a;a=b;b

[单选题]
若有宏定义:
#define S(a,b) t=a;a=b;b=t
由于变量 t 没定义,所以此宏定义在编译时是错误的。请问这句话的说法是正确的吗?

  • 正确
  • 错误
宏定义不做语法检查。
预处理是在编译之前的处理,而编译的工作之一便是语法检查,所以预处理不做语法检查。

题中的S(a,b)是没问题的,有问题的调用的地方。
宏定义在代码中只是简单的替换,调用时简单的将S(a,b)替换为“t=a;a=b;b=t“,编译时会显示t未定义。
但是若是只是有宏定义,但代码中未使用S(a,b)的话,是不会出现t未定义的情况的,因为在代码中压根就没有替换来的”t=a;a=b;b=t“。
编辑于 2018-09-27 21:04:48 回复(3)
宏定义不作类型检查
发表于 2017-10-29 09:24:20 回复(0)
宏定义就是起展开的作用,至于有没有定义是你main函数里面的事情了。
发表于 2022-05-20 14:34:07 回复(0)
在VS2015上是编译错误的:t是未定义标识符

发表于 2018-07-05 16:55:29 回复(3)
注意是编译期间!宏不对类型进行检查,使用时进行简单的替换,编译没有问题,但运行期间会有t未定义的错误报告
发表于 2022-11-04 02:29:28 回复(0)
宏定义没错,但是运行错误
发表于 2020-02-09 11:09:47 回复(0)
预处理操作进行处理并不会进行语法检查,这个阶段有错也不会报错,第二个阶段即编译阶段才会进行语法检查

发表于 2023-07-26 11:25:07 回复(0)
未使用宏,编译没问题,因为没有做替换;
使用了宏,编译出错,替换后,t 没有定义。
发表于 2023-06-08 09:08:10 回复(0)
如果只是宏定义而言,不会做类型检查,但是如果调用了函数S,就会显示未定义t这个错误
发表于 2022-06-02 14:09:14 回复(0)
宏定义不做语法检查。
预处理是在编译之前的处理,而编译的工作之一便是语法检查,所以预处理不做语法检查。

题中的S(a,b)是没问题的,有问题的调用的地方。
宏定义在代码中只是简单的替换,调用时简单的将S(a,b)替换为“t=a;a=b;b=t“,编译时会显示t未定义。
但是若是只是有宏定义,但代码中未使用S(a,b)的话,是不会出现t未定义的情况的,因为在代码中压根就没有替换来的”t=a;a=b;b=t“。
发表于 2022-05-22 14:10:46 回复(0)
如果只定义这个宏,然后不使用编译不会报错;如果使用了该宏,需要事先定义t;
发表于 2021-09-05 10:39:57 回复(0)
咬文嚼字题😒
发表于 2020-10-22 19:43:34 回复(0)
#define是预处理,预处理不检查语法错误
发表于 2019-09-06 15:34:19 回复(0)

实测结果,是可以的,这句话是错的
发表于 2018-04-23 22:42:03 回复(3)
宏定义不做类型检查,所以题目这种宏定义方式是正确的;只不过调用这个宏之前必须定义变量t,要不然会报错,vs2010亲测
编辑于 2018-05-29 08:28:54 回复(5)
宏定义后不能有分号
发表于 2017-09-20 19:45:32 回复(2)