宏方法有 2 个返回

Macro method has 2 returns?

本文关键字:返回 方法      更新时间:2023-10-16

我刚刚从 Java 转移到 C++ 并且我以前从未使用过宏,我很困惑某些方法似乎返回两个变量,例如

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM)

甚至更奇怪的组合,如

JNIEXPORT jdoubleArray JNICALL Java_algorithms_Shuffle0_getPriorities (JNIEnv *, jobject, jint, jint).

有人可以告诉我发生了什么吗?抱歉,如果这看起来像是极端的无知,但正如我所说,我以前从未使用过宏,并且C++关于预处理器的章节的完整参考并没有使这些安排更加清晰。

您需要展开每个宏才能完全理解它。通过预处理器运行代码以查看其扩展方式,或使用有用的 IDE 工具进行演示。

执行此操作时,您将看到以下内容:

  • LRESULT是结果类型。它是某种描述的整数。
  • CALLBACK定义了将__stdcall的调用约定。

至于另一个:

  • JNIEXPORT可能会扩展到declspec(dllexport).这指定要从库中导出函数。
  • jdoubleArray是返回值。
  • JNICALL将是调用约定。

您可以将这些额外的令牌视为函数的装饰器。它们不会在概念级别更改函数的签名。Java 中最接近的类似概念可能是属性。