De syntaxis begrijpen om functies te creëren in 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.

Functiedefinitie

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

void functienaam() {

	Verklaringen van variabelen, etc.
	Expressies...
	//er is geen expliciete return nodig.
}

Een functie retourneert geen speciale waarde, noch binnenkomende parameters.

void functienaam(variabele van gegevenstype) {

	Verklaringen van variabelen, etc.
	Expressies...
	//er is geen expliciete return nodig.
}

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

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

ongeldige functienaam (variabele van gegevenstype, variabele van gegevenstype, enz.) {

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

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

ongeldige functienaam (variabele van gegevenstype, variabele van gegevenstype, enz.) {

	Declaraties van variabelen, etc.
	Expressies...
	retour retourwaarde
}

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

Het typereturnvan een functie moet hetzelfde zijn als het gegevenstype van de return-waarde die de functie retourneert. Deretourwaardekan 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 vrijwel geen beperkingen op het retourtype, behalve array. (Array is een ander, meer geavanceerd onderwerp over het creëren van uw gegevens. Dit 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 ‘teruggave’ is impliciet. Dat betekent dat je expliciet ‘return’ moet vermelden aan het einde van een ‘void’-functie.

Een functie maken vóór 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 identificatiecode 'getGCD'

 VEXcode_V5_Text_xi2kumoPkA.png

In feite is dit waar, ongeacht of het afkomstig is van het main() of een ander aanroepend functieblok, dat wil zeggen dat het “aangeroepen functieblok” moet voorafgaan aan het “aanroepende functieblok.”

Twee mogelijke oplossingen:

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


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;
  terwijl (rest > 0) {
    rest = a % b;
    a = b;
    b = rest;
  }
  retourneer een;
}
	

Plaats het prototype (ook wel handtekening genoemd) van de functie vóór het ‘aanroepende functieblok’.


Wat als u functies in verschillende bestanden wilt modulariseren?

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

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

U moet dit headerbestand aan uw project “toevoegen” 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 en geen spatie bevat.)

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

//dit is het common.cpp-bestand

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

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

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

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

Nu bestaat alles wat u in het hoofd-cpp-bestand hebt 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 VEX-bibliotheek:

  • Pass by value vs. pass by reference
  • Geef een array door
  • Passeren in een structuur

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

Last Updated: