宏方法有2个返回? 我刚刚从java移到C++,以前从来没有使用过宏,我很困惑有些方法是如何返回两个变量的,比如 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM)
或者更奇怪的组合,比如宏方法有2个返回? 我刚刚从java移到C++,以前从来没有使用过宏,我很困惑有些方法是如何返回两个变量的,比如 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM),c++,macros,c-preprocessor,C++,Macros,C Preprocessor,或者更奇怪的组合,比如 JNIEXPORT jdoubleArray JNICALL Java_algorithms_Shuffle0_getPriorities (JNIEnv *, jobject, jint, jint). 有人能告诉我发生了什么事吗?抱歉,如果这看起来是极度无知,但我说我以前从来没有使用过宏,预处理器上的C++章节的完整引用并不能使这些安排更清楚。 < p>你需要扩展每个宏来完全理解它。在预处理器中运行代码以查看其如何扩展,或者使用有用的IDE工具向您展示 当您这样做时
JNIEXPORT jdoubleArray JNICALL Java_algorithms_Shuffle0_getPriorities (JNIEnv *, jobject, jint, jint).
有人能告诉我发生了什么事吗?抱歉,如果这看起来是极度无知,但我说我以前从来没有使用过宏,预处理器上的C++章节的完整引用并不能使这些安排更清楚。 < p>你需要扩展每个宏来完全理解它。在预处理器中运行代码以查看其如何扩展,或者使用有用的IDE工具向您展示 当您这样做时,您将看到以下内容:
是结果类型。这是一个可以描述的整数LRESULT
定义调用约定,即回调
\uu stdcall
可能扩展到JNIEXPORT
。这指定要从库中导出函数declspec(dllexport)
是返回值jdoubleArray
将是调用约定JNICALL
您可以将这些额外的标记视为函数的装饰器。它们不会在概念级别更改函数的签名。在Java中最类似的概念可能是属性。宏实际上不会“返回”任何东西。它们只是文本替换。所以
#定义FOO 42
和bar(FOO)
变成bar(42)
。谢谢,这是我错过的调用约定部分。现在有道理了。