我刚刚从Java转到C ++,我之前从未使用过宏,我很困惑某些方法似乎返回两个变量,例如
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM)
甚至是像
这样的奇怪组合JNIEXPORT jdoubleArray JNICALL Java_algorithms_Shuffle0_getPriorities (JNIEnv *, jobject, jint, jint).
有人能告诉我发生了什么事吗?很抱歉,如果这看起来像是极度无知,但正如我所说,我之前从未使用过宏,预处理器上的C ++完整参考章节并没有让这些安排更清晰。
答案 0 :(得分:2)
您需要展开每个宏才能完全理解它。通过预处理器运行代码以查看它的扩展方式,或使用有用的IDE工具向您显示。
执行此操作时,您将看到以下内容:
LRESULT
是结果类型。这是一些描述的整数。CALLBACK
定义了__stdcall
。至于另一个:
JNIEXPORT
可能会扩展为declspec(dllexport)
。这指定该函数将从库中导出。jdoubleArray
是返回值。JNICALL
将成为召集会议。您可以将这些额外的标记视为该函数的装饰器。它们不会在概念级别更改函数的签名。 Java中最接近的类似概念可能是属性。