宏方法有2个回报?

时间:2012-02-26 19:14:00

标签: c++ macros c-preprocessor

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

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

甚至是像

这样的奇怪组合
JNIEXPORT jdoubleArray JNICALL Java_algorithms_Shuffle0_getPriorities (JNIEnv *, jobject, jint, jint).

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

1 个答案:

答案 0 :(得分:2)

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

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

  • LRESULT是结果类型。这是一些描述的整数。
  • CALLBACK定义了__stdcall
  • 的调用约定

至于另一个:

  • JNIEXPORT可能会扩展为declspec(dllexport)。这指定该函数将从库中导出。
  • jdoubleArray是返回值。
  • JNICALL将成为召集会议。

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