c++ - 像这样使用宏合法吗?

标签 c++ c macros

我有一个跨平台项目,我发现宏可能是克服一些平台不一致的最简单方法,但是由于我不是计算机科学背景,所以我不确定我们是否可以这样使用宏:

#ifndef _WIN32
  #define someWindowsFunction(x, y) someLinuxFunction(y, x, &x)
#endif

最佳答案

是的,它是合法的,但它是否有效取决于 someWindowsFunction() 的调用细节(x 必须是左值)和当然,所涉及功能的行为。

有很多细节需要用宏正确完成,因为它们是简单的文本替换。您应该养成的一件事是始终在宏参数周​​围加上括号:

#define someWindowsFunction(x, y) someLinuxFunction((y), (x), &(x))

偶尔会有您不想要 parent 的时候,但这种情况并不常见,除非您知道有理由不这样做,否则您应该这样做。

关于c++ - 像这样使用宏合法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20037088/

相关文章:

c++ - 从返回 int 的函数中获取 char 的正确方法?

c++ - 为什么可以使用额外参数调用 Boost.Bind 函数?

c++ - OpenGL:VAO/VBO 混淆

c++ - 如何更改条件编译禁用的代码的字体或颜色设置?

objective-c - "va_start used in function with fixed args"异常?

带有 syslog 日志记录的 C 宏

c++ - Visual C++ std::regex_search 错误?

c - 将正在运行的程序的输出通过管道传输到 xargs

c - 使用数组和随机数循环打印一个简单的 5 x 5 板

c - 为什么这个 C 宏会导致语法错误?