Макро метод имеет 2 возврата? - PullRequest
3 голосов
/ 26 февраля 2012

Я только что перешел с Java на C ++ и никогда раньше не использовал макросы, и я запутался, как некоторые методы возвращают две переменные, такие как

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

или даже незнакомые комбинации, такие как

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

Может кто-нибудь сказать мне, что происходит? Извините, если это кажется чрезвычайным невежеством, но, как я уже говорил, я никогда раньше не использовал макросы, и глава «Полная ссылка на C ++» о препроцессоре не делает эти механизмы более понятными.

1 Ответ

2 голосов
/ 26 февраля 2012

Вам нужно расширить каждый макрос, чтобы полностью понять его.Запустите ваш код через препроцессор, чтобы увидеть, как он расширяется, или используйте полезные инструменты IDE, чтобы показать вам.

Когда вы это сделаете, вы увидите следующее:

  • LRESULT тип результата.Это целое число некоторого описания.
  • CALLBACK определяет соглашение о вызовах, которое будет __stdcall.

А что касается другого:

  • JNIEXPORT вероятно расширяется до declspec(dllexport).Это указывает, что функция должна быть экспортирована из библиотеки.
  • jdoubleArray - возвращаемое значение.
  • JNICALL будет соглашением о вызовах.

Вы можете считать эти дополнительные токены декораторами функции.Они не меняют сигнатуру функции на концептуальном уровне.Вероятно, наиболее близким аналогичным понятием в Java будут атрибуты.

...