簡體   English   中英

C ++函數類型?

[英]C++ Function Type?

我是新手,學習C ++(知道很多Java),以下代碼讓我感到困惑......

在此輸入圖像描述

我知道這個代碼片段正在處理指向函數的指針(它是一個回調,這是有道理的)但是什么讓我失望的是返回類型和函數名之間的參數。 這到底是什么血腥的?

它看起來像一種函數,但我從來沒有聽說過,甚至在搜索和讀取函數指針后,我也無法找到任何提及函數可能有類型的東西。

如果是這樣,那么如何定義函數類型?

謝謝,-Cody

GLFWCALL不是一個類型,它是一個擴展為特定於平台的調用約定的宏,或一個空字符串。 這是glfw.h的修剪片段:

#if defined(_WIN32) && defined(GLFW_BUILD_DLL)
 #define GLFWCALL     __stdcall
#elif defined(_WIN32) && defined(GLFW_DLL)
 #define GLFWCALL     __stdcall
#else
 /* We are either building/calling a static lib or we are non-win32 */
 #define GLFWCALL
#endif

在x86 / win32上使用正確的調用約定非常重要,因為有些調用約會希望調用者可以通過被調用者清理堆棧。 傳遞參數的順序也可能存在差異。

在Windows上, GLFWCALL__stdcall的宏,而在其他平台上,它是一個什么都GLFWCALL的宏。

__stdcall實現了一個特定的調用約定,並且是普通C或C ++之上的編譯器擴展。

宏是在編譯器的詞法分析器和解析器與它們交互之前替換代碼的代碼片段。

GLFWCALL是一個宏,如果需要,可以擴展為調用約定 因為這個函數將被外部代碼調用,所以它必須使用外部代碼所期望的調用約定。 例如,如果函數將其返回值放在堆棧上,而外部代碼將它放在寄存器中,則繁榮。

標記為函數簽名的一部分的問題是預處理器宏,該宏在頭部的其他位置定義。 某些平台上的某些功能有額外的要求。

例如,Windows平台上的DLL文件中的函數通常使用__declspec(dllexport)修飾符,但是當用戶的項目中包含相同的頭時,他們需要使用__declspec(dllimport)。 為此目的使用預處理器宏意味着他們可以在所有相關函數上使用該宏,並且在編譯自己的DLL或用戶DLL時簡單地定義宏,並且在__declspec不相關的平台上可以將其定義為空。 像這樣的宏還有很多其他原因。

在這種特殊情況下,您可以有效地假裝宏為空並完全忽略它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM