Zrozumienie składni tworzenia funkcji w VEXcode Pro V5

Definicja funkcji

Teraz, gdy przeszliśmy przez kilka przykładów, spójrzmy na ogólną postać definicji funkcji:

void function-name() {

	Deklaracje zmiennych itp.
	Wyrażenia...
	//nie jest wymagany wyraźny zwrot.
}

Funkcja nie zwraca wartości specjalnej ani parametrów przychodzących.

void function-name(data-type variable) {

	Deklaracje zmiennych itp.
	Wyrażenia...
	//nie jest wymagany wyraźny zwrot.
}

Jeśli chcesz mieć wiele zmiennych, po prostu użyj "," jako separatora:

Funkcja nie zwraca specjalnej wartości, ale z jednym parametrem.

void nazwa funkcji (zmienna typu danych, zmienna typu danych itp.) {

	Deklaracje zmiennych itp.
	Wyrażenia...
	//nie jest wymagany wyraźny zwrot.
}

Funkcja nie zwraca specjalnej wartości, ale zawiera więcej niż jeden parametr.

void nazwa funkcji (zmienna typu danych, zmienna typu danych itp.) {

	Deklaracje zmiennych itp.
	Wyrażenia...
	zwróć zwracaną wartość
}

Funkcja zwraca wartość określonego typu danych z więcej niż jednym parametrem wejściowym.

 zwraca typ funkcji musi być taki sam, jak typ danych zwracanej wartości zwracanej przez funkcję . Zwracana wartość  może być wartością stałą lub zmienną. Musi być poprzedzony słowem kluczowym „return.

Następujące zasady regulują rodzaj zwrotu:

  • Nie ma prawie żadnych ograniczeń dotyczących typu zwracanego, z wyjątkiem tablicy. (Tablica to kolejny bardziej zaawansowany temat dotyczący tworzenia danych. Jest to poza zakresem tego artykułu i nie jest tutaj omawiane.
  • Określenie, że zwracany typ „void” oznacza, że nie jest wymagana żadna zwracana wartość. Klauzula „zwrot” jest dorozumiana. Oznacza to, że musisz wyraźnie określić „return” na końcu funkcji „unieważnij”.

Tworzenie funkcji przed main() czy po?

Kompilator odczytuje twój plik od góry do dołu. Tak więc kolejność ma znaczenie.

Weźmy jako przykład prostą funkcję największego wspólnego mianownika (GCD). Pojawi się błąd: użycie niezadeklarowanego identyfikatora ” getGCD'

 VEXcode_V5_Text_xi2kumoPkA.png

W rzeczywistości 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 getGCD(int a, int b) {
  int reszta = 1;
  while (pozostała > 0) {
    reszta = a % b ;
    a = b;
    b = reszta;
  }
  zwraca a;
}


int main() {
	Brain.Screen.printAt (5,60, „GCD ( %d, %d ) = %d”, pobierzGCD(60, 100) );
}
	

Przenieś „wywoływaną funkcję” nad „wywołujący blok funkcyjny” w przykładzie „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 reszta = 1;
  while (pozostała > 0) {
    reszta = a % b ;
    a = b;
    b = reszta;
  }
  zwraca a;
}
	

Umieść prototyp (zwany również podpisem) funkcji przed „wywołującym blokiem funkcyjnym”.


Co zrobić, jeśli chcesz modularyzować 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 kompilacją kodu. Pozwala to VEXcode Pro V5 IDE „być świadomym” włączenia tego nowego pliku nagłówkowego przed rozpoczęciem tworzenia projektu.

Oto jak:

W tym pliku nagłówkowym „common.h” (możesz nazwać, co chcesz, o ile jest to alfanumeryczne 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 reszta = 1;
  while (pozostała > 0) {
    reszta = a % b ;
    a = b;
    b = reszta;
  }
  zwraca a;
}

Przenieś funkcję getGCD(...) do tego pliku

#include "vex.h"
#include "common.h"
przy użyciu przestrzeni nazw vex;

int main() { 
  vexcodeInit();
	Brain.Screen.printAt(5,60, "GCD ( %d, %d ) = %d”, getGCD(60, 100) );
}

Teraz wszystko, co masz w głównym pliku cpp, będzie składało 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 Bazy wiedzy w przyszłości:

  • Przekazywanie według wartości a przekazywanie przez odniesienie
  • Przekaż w tablicy
  • Przejdź w strukturze

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