如果我这样做:
#define F a
F/
It expands to a/
godbolt https://gcc.godbolt.org/z/reGxqz
如果我这样做:
#define F /
F/
It expands to / /
with a space in between goodbolt https://gcc.godbolt.org/z/nYhzGn
But if I convert it to a string, and print it, it doesn't add any spaces goodbolt https://gcc.godbolt.org/z/bTnsnK:
#include <stdio.h>
#define STR_IMPL(x) #x
#define STR(x) STR_IMPL(x)
#define F /
int main() {
puts(STR(F/));
}
为什么中间有一个空格,但只是某些时候?其他情况是否可以添加更多空格?
宏在令牌级别起作用。以字符串形式打印结果时会添加空格以消除歧义。
F/
是两个令牌,F
and /
。宏展开后,仍然需要是两个token,/
and /
。但如果你把它们并排打印,就会变成//
,这只是一个标记(一条评论)。所以中间需要有一个空间。
长话短说:是的,宏扩展可以添加空格,因为空格在宏操作的级别上并不重要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)