De syntaxis begrijpen om functies te maken in VEXcode Pro V5

Functiedefinitie

Nu we een paar voorbeelden hebben doorgenomen, gaan we eens kijken naar de algemene vorm van een functiedefinitie:

void function-name() {

	Declaraties van variabelen, etc.
	Expressies...
	// er is geen expliciete terugkeer nodig.
}

Een functie retourneert geen speciale waarde, noch geen binnenkomende parameters.

void function-name(data-type variabele) {

	Declaraties van variabelen, etc.
	Expressies...
	// er is geen expliciete terugkeer nodig.
}

Als je meerdere variabelen wilt, gebruik je gewoon "," als scheidingsteken:

Een functie retourneert geen speciale waarde, maar met één parameter.

void functienaam (variabele van het gegevenstype, variabele van het gegevenstype, enz.) {

	Declaraties van variabelen, enz.
	Expressies...
	// er is geen expliciete terugkeer nodig.
}

Een functie retourneert geen speciale waarde, maar met meer dan één parameter.

void functienaam (variabele van het gegevenstype, variabele van het gegevenstype, enz.) {

	Declaraties van variabelen, enz.
	Expressies...
	return return-value
}

Een functie retourneert een waarde van een specifiek datatype en met meer dan één parameter.

De retourneert type van een functie moet hetzelfde zijn als het gegevenstype van de retourwaarde die de functie retourneert . De retourwaarde kan een constante waarde of een variabele zijn. Het moet worden voorafgegaan door het trefwoord “return.

De volgende regels zijn van toepassing op het retourtype:

  • Er zijn bijna geen beperkingen voor het retourtype, behalve array. (Array is een ander, meer geavanceerd onderwerp over het maken van uw gegevens. Het valt buiten het bestek van dit artikel en wordt hier niet behandeld.
  • Als u opgeeft dat het retourtype "void" betekent dat er geen retourwaarde nodig is. De clausule "retour" is impliciet. Dat betekent dat je expliciet "return" moet vermelden aan het einde van een "void" -functie.

Een functie maken voor de main() of erna?

De compiler leest uw bestand van boven naar beneden. De volgorde doet er dus toe.

Laten we de eenvoudige functie van de grootste gemene deler (GCD) als voorbeeld nemen. U krijgt een foutmelding: gebruik van niet-aangegeven identifier ' getGCD'

 VEXcode_V5_Text_xi2kumoPkA.png

Eigenlijk is dit waar, of het nu uit het hoofd( ) of een ander aanroepend functieblok komt, d.w.z. het "aangeroepen functieblok" moet voorafgaan aan het "aanroepende functieblok".

Twee mogelijke oplossingen:

int getGCD(int a, int b) {
  int rest = 1;
  while (rest > 0) {
    rest = a % b ;
    a = b;
    b = rest;
  }
  retourneer een;
}


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

Verplaats de "aangeroepen functie" boven het "aanroepende functieblok", in het voorbeeld "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 rest = 1;
  while (rest > 0) {
    rest = a % b ;
    a = b;
    b = rest;
  }
  retourneer een;
}
	

Zet het prototype (ook wel handtekening genoemd) van de functie voor het "aanroepende functieblok".


Wat als u functies in verschillende bestanden wilt moduleren?

Stap 1: Maak een header-bestand en plaats het prototype van de functie in dit bestand.

bijv. maak een bestand met de naam "myFuncs.h"

U moet dit headerbestand "toevoegen" aan uw project voordat u uw code compileert. Hierdoor kan de VEXcode Pro V5 IDE "op de hoogte zijn" van de opname van dit nieuwe headerbestand voordat het begint met het bouwen van uw project.

Hier is hoe:

In dit headerbestand "common.h" (je kunt een naam geven wat je wilt, zolang het maar alfanumeriek is zonder spatie.)

Stap 2: Maak een apart cpp-bestand aan, bijvoorbeeld common.cpp

//dit is het common.cpp-bestand

int getGCD(int a, int b) {
  int rest = 1;
  while (rest > 0) {
    rest = a % b ;
    a = b;
    b = rest;
  }
  retourneer een;
}

Verplaats de functie getGCD(...) naar dit bestand

#include "vex.h"
#include "common.h"
met naamruimte vex;

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

Nu, alles wat je in het hoofd-cpp-bestand hebt, bestaat uit het volgende:

Referentie: https://api.vexcode.cloud /v5/html/namespacevex.html

Toekomstige onderwerpen zullen in de toekomst worden behandeld in meer geavanceerde secties van de Knowledge Base:

  • Pass-by-waarde versus pass-by-referentie
  • Pass in een array
  • Pass in een structuur