c++ - 宏返回值

标签 c++ macros

宏可以返回一个对象吗?

#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/

相关文章:

c - 用于在 C 中将符号与变量值连接的预处理器指令

c# - 将套接字从 .NET 传递到非托管 C++ 代码

c++ - 我应该使用哪个容器进行随机访问、廉价的添加和删除(无需取消/分配),并且最大大小已知?

c++ - 将十六进制值 FF 存储在无符号 8 位整数中会产生垃圾而不是 -1

c - 宏扩展和字符串化 : How to get the macro name (not its value) stringified using another macro?

macros - 为什么 Rust 找不到多语句宏中的变量?

c++ - 使用字符串文字初始化 vector<char>

c++ - Qt/C++ - 滚动和环绕菜单

loops - 使用 lisp 循环宏进行高级循环

c++ - 用于创建结构的可变参数宏