The VEX Visual Studio Code Extension has replaced VEXcode Pro V5, which is now end-of-life.
VEXcode Blocks and VEXcode Text remain actively developed and supported for all VEX platforms.
函數定義
現在我們已經完成了一些範例,讓我們來看看函數定義的一般形式:
void function-name() { 變數宣告等 表達式... //不需要明確回傳。 }
函數不傳回特殊值,也不傳回傳入參數。
void 函數名(資料型別變數) { 變數宣告等 表達式... //不需要明確回傳。 } 如果你想要多個變量,你只需使用「,」作為分隔符號:
函數不傳回特殊值,但帶有一個參數。
void 函數名稱(資料型別變數、資料型別變數等) { 變數宣告等。1 表達式 //不需要明確回傳。 }
函數不傳回特殊值,但具有多個參數。
void 函數名稱(資料型別變數、資料型別變數等) { 變數宣告等。1 表達式 返回返回值 }
函數傳回特定資料類型的值,並且具有多個輸入參數。
函數的return型別必須與函數傳回值的資料型別相同。 回傳值可以是常數值或變數。 它前面必須帶有關鍵字“return”。”
以下規則控制回傳類型:
- 除了數組之外,返回類型幾乎沒有限制。 (數組是關於如何創建資料的另一個更高級的主題。 它超出了本文的範圍,這裡不予討論。
- 指定傳回類型“void”意味著不需要傳回值。 「返回」條款是隱含的。 這意味著您必須在“void”函數的末尾明確聲明“return”。
在 main() 之前還是之後建立函數?
編譯器從上到下讀取您的檔案。 因此,順序確實很重要。
讓我們以簡單的最大公分母(GCD)函數為例。 你會得到一個錯誤:use of undeclared identifier 'getGCD'
實際上,無論是來自main()還是其他呼叫功能塊都是如此,即「被呼叫功能塊」必須位於「呼叫功能塊」之前。
兩種可能的解決方案:
int getGCD(int a, int b) { int 餘數 = 1; while (餘數 > 0) { 餘數 = a % b; a = b; b = 餘數; } 返回a; } int main() { Brain.Screen.printAt(5,60, “GCD ( %d, %d ) = %d”, getGCD(60, 100) ); }
將「被呼叫函數」移至「呼叫函數塊」上方,在範例中為「main()」。
int getGCD(int, int); int main() { Brain.Screen.printAt(5,60, "GCD ( %d, %d ) = %d", getGCD(60, 100) ); } int getGCD(int a, int b) { int 餘數 = 1; while (餘數 > 0) { 餘數 = a % b; a = b; b = 餘數; } 返回a; }
將函數的原型(也稱為簽名)放在「呼叫函數區塊」之前。
如果您希望將不同檔案中的函數模組化怎麼辦?
第一步:建立一個頭文件,並將函數的原型放入該文件中。
例如建立一個名為「myFuncs.h」的文件
在編譯程式碼之前,您需要將此頭檔「新增」到您的專案中。 這使得 VEXcode Pro V5 IDE 在開始建置專案之前「知道」包含這個新頭檔。
具體方法如下:
在此頭檔「common.h」中(您可以隨意命名,只要它是字母數字且沒有空格即可。)
步驟2:建立一個單獨的cpp文件,例如,名為common.cpp
//這是common.cpp檔 int getGCD(int a, int b) { int RM = 1; while (餘數 > 0) { 餘數 = a % b; a=b; b = 餘數; } 返回a; }
將函數 getGCD(...) 移至此檔案中
#include "vex.h" #include "common.h" 使用命名空間vex; int main() { vexcodeInit(); Brain.Screen.printAt(5,60, "GCD ( %d, %d ) = %d", getGCD(60, 100) ); }
現在,主 cpp 檔案中的所有內容將包含以下內容
參考:https://api.vexcode.cloud/v5/html/namespacevex.html
未來的主題將在 VEX 庫的更高級部分中涵蓋:
- 按值傳遞與按引用傳遞
- 傳入一個數組
- 傳入一個結構體