了解在 VEXcode Pro V5 中建立函數的語法

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'

 VEXcode_V5_Text_xi2kumoPkA.png

實際上,無論是來自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 庫的更高級部分中涵蓋:

  • 按值傳遞與按引用傳遞
  • 傳入一個數組
  • 傳入一個結構體

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: