宏可以返回一个对象吗?
#define macro1 {obj1}
由于宏是文本替换,我可以使用像 macro1.function1() 这样的宏吗?
谢谢。
最佳答案
宏从不返回任何东西。宏返回代码的文本表示,这些代码将被粘贴到编译前使用它的程序位置。
了解 C Preprocessor .
所以:
#define macro1 {obj1}
int main() {
macro1
}
...将像您编写的那样编译
int main() {
{obj1}
}
这只是文本替换,可以选择接受一个参数。
如果您使用的是 GCC,您可以使用 cpp
工具查看预处理后程序的外观:
# cpp myprog.cpp myprog.cpp_out
通常将宏与对象混合是不好的做法,使用 templates相反。
宏在对象方面的一个已知用法是使用它们来访问单例(然而,这通常不是一个好主意):
#define LOGGER Logger::getLogger()
...
LOGGER->log("blah");
您还可以使用预处理器在编译时选择要使用的对象:
#ifdef DEBUG
# define LOGGER DebugLogger
#else
# define LOGGER Logger
#end
// assuming that DebugLogger and Logger are objects not types
LOGGER.log("blah");
...但是前面提到的模板做得更好。
关于c++ - 宏返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3598635/