我正在阅读phoneME的源代码。它是一个 FOSS JavaME 实现。它是用 C++ 编写的,我偶然发现了这一点:
// Makes a string of the argument (which is not macro-expanded)
#define STR(a) #a
我了解 C 和 C++,但我从未读过这样的东西。什么是#
in #a
do?
另外,在同一个文件中,还有:
// Makes a string of the macro expansion of a
#define XSTR(a) STR(a)
我的意思是,如果定义一个新的宏只是调用一个现有的宏,那它有什么用呢?
源代码位于。您可以使用 CTRL+F 找到它。
在第一个定义中,#a
表示将宏参数打印为字符串。这将会改变,例如STR(foo)
into "foo"
,但它不会对其参数进行宏扩展。
第二个定义不会向第一个定义添加任何内容,但通过将其参数传递给另一个宏,它会强制对其参数进行完整的宏扩展。所以XSTR(expr)
创建一个字符串expr
所有宏都完全展开。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)