Zrozumienie składni tworzenia funkcji w 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.

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”

 Edytor kodu VEXcode Pro V5 pokazujący główną funkcję wywołującą getGCD przed jej zdefiniowaniem, przy czym getGCD jest wyróżniony jako błąd niezdefiniowanego identyfikatora.

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:

Interfejs VEXcode Pro V5 z otwartym menu kontekstowym folderu i wybraną opcją Nowy plik, umożliwiającą utworzenie pliku nagłówkowego.

Okno Utwórz nowy plik pokazujące wybraną opcję pliku nagłówkowego C++ z wprowadzoną nazwą pliku common.h.

Edytor kodu VEXcode Pro V5 pokazujący funkcję getGCD zdefiniowaną w osobnym pliku common.cpp.

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

Okno Utwórz nowy plik pokazujące wybraną opcję pliku źródłowego C++ z wprowadzoną nazwą pliku 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ę

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

Last Updated: