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.
Definicja funkcji
Teraz, gdy przejrzeliśmy kilka przykładów, przyjrzyjmy się ogólnej formie definicji funkcji:
void function-name() {
Deklaracje zmiennych itp.
Wyrażenia...
//nie jest konieczne żadne jawne zwracanie.
}
Funkcja nie zwraca żadnej specjalnej wartości ani żadnych parametrów przychodzących.
void function-name(data-type variable) {
Deklaracje zmiennych itp.
Wyrażenia...
//nie jest konieczne żadne jawne zwracanie.
}
Jeśli chcesz mieć wiele zmiennych, po prostu użyj "," jako rozgranicznika:
Funkcja nie zwraca żadnej specjalnej wartości, ale z jednym parametrem.
void function-name(zmienna typu danych, zmienna typu danych, itd.) {
Deklaracje zmiennych, itd.
Wyrażenia...
//nie jest konieczne żadne jawne zwracanie.
}
Funkcja nie zwraca żadnej specjalnej wartości, ale zawiera więcej niż jeden parametr.
void function-name(zmienna typu danych, zmienna typu danych, itd.) {
Deklaracje zmiennych, itd.
Wyrażenia...
zwróć wartość zwracaną
}
Funkcja zwraca wartość określonego typu danych i przy więcej niż jednym parametrze wejściowym.
Typ zwracany przez funkcję, równymusi być taki sam, jak typ danych wartości zwracanej przez funkcję. Wartość zwracanamoże być wartością stałą lub zmienną. Musi być poprzedzony słowem kluczowym „return.”
Typ zwrotu regulują następujące zasady:
- Nie ma prawie żadnych ograniczeń dotyczących typu zwracanego, z wyjątkiem tablicy. (Tablica to kolejny bardziej zaawansowany temat dotyczący tworzenia danych. Wykracza to poza zakres tego artykułu i nie będzie tu omawiane.
- Określenie, że zwracany typ „void” oznacza, że nie jest konieczna żadna wartość zwracana. Klauzula „powrót” jest dorozumiana. Oznacza to, że musisz wyraźnie określić „return” na końcu funkcji „void”.
Tworzenie funkcji przed main() czy po?
Kompilator czyta plik od góry do dołu. Zatem kolejność ma znaczenie.
Weźmy jako przykład prostą funkcję największego wspólnego mianownika (NWD). Otrzymasz błąd:użyto niezdefiniowanego identyfikatora „getGCD”
Właściwie jest to prawdą niezależnie od tego, czy pochodzi z main(), czy z innego wywołującego bloku funkcyjnego, tj. „wywoływany blok funkcyjny” musi poprzedzać „wywołujący blok funkcyjny”.
Dwa możliwe rozwiązania:
int getNWW(int a, int b) {
int reszta = 1;
while (reszta > 0) {
reszta = a % b;
a = b;
b = reszta;
}
return a;
}
int main() {
Brain.Screen.printAt(5,60, “NWW ( %d, %d ) = %d”, getNWW(60, 100) );
}
Przenieś „wywoływaną funkcję” nad „wywołujący blok funkcyjny”, w przykładzie „main().”.
int getNWD(int, int);
int main() {
Brain.Screen.printAt(5,60, "NWD ( %d, %d ) = %d", getNWD(60, 100) );
}
int getNWD(int a, int b) {
int reszta = 1;
while (reszta > 0) {
reszta = a % b;
a = b;
b = reszta;
}
return a;
}
Umieść prototyp (zwany także sygnaturą) funkcji przed „wywoływającym blokiem funkcyjnym”.
A co jeśli chcesz zmodularyzować funkcje w różnych plikach?
Krok 1: Utwórz plik nagłówkowy i umieść w nim prototyp funkcji.
np. utwórz plik o nazwie „myFuncs.h”
Musisz „dodać” ten plik nagłówkowy do swojego projektu przed skompilowaniem kodu. Dzięki temu IDE VEXcode Pro V5 „będzie świadome” dołączenia nowego pliku nagłówkowego, zanim zacznie budować projekt.
Oto jak:



W tym pliku nagłówkowym „common.h” (możesz nazwać dowolną nazwę, pod warunkiem, że będzie ona alfanumeryczna i bez spacji).
Krok 2: Utwórz osobny plik cpp, np. o nazwie common.cpp

//to jest plik common.cpp
int getGCD(int a, int b) {
int remainder = 1;
while (remainder > 0) {
remainder = a % b;
a = b;
b = remainder;
}
return a;
}
Przenieś funkcję getGCD(...) do tego pliku
#include "vex.h"
#include "common.h"
używając przestrzeni nazw vex;
int main() {
vexcodeInit();
Brain.Screen.printAt(5,60, "NWD ( %d, %d ) = %d", getGCD(60, 100) );
}
Teraz wszystko, co masz w głównym pliku cpp, będzie składać się z następujących elementów
Odniesienie:https://api.vexcode.cloud/v5/html/namespacevex.html
Przyszłe tematy zostaną omówione w bardziej zaawansowanych sekcjach Biblioteki VEX w przyszłości:
- Przekazywanie przez wartość a przekazywanie przez referencję
- Przekaż tablicę
- Przekaż strukturę