Förstå syntaxen för att skapa funktioner i 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.

Funktionsdefinition

Nu när vi har gått igenom några exempel, låt oss titta på den allmänna formen av en funktionsdefinition:

void function-name() {

	Deklarationer av variabler, etc.
	Uttryck...
	//ingen explicit retur är nödvändig.
}

En funktion returnerar inget specialvärde, och inte heller några inkommande parametrar.

void function-name(data-type variabel) {

	Deklarationer av variabler, etc.
	Uttryck...
	//ingen explicit retur är nödvändig.


du vill ha flera variabler använder du helt enkelt "," som avgränsare:

En funktion returnerar inget speciellt värde, men med en parameter.

void funktionsnamn(datatypvariabel, datatypvariabel, etc.) {

	Deklarationer av variabler, etc.
	Uttryck...
	//ingen explicit retur är nödvändig.
}

En funktion returnerar inget speciellt värde, men med mer än en parameter.

void funktionsnamn(datatypvariabel, datatypvariabel, etc.) {

	Deklarationer av variabler, etc.
	Uttryck...
	returnera returvärde
}

En funktion returnerar ett värde av en specifik datatyp, och med mer än en inmatningsparameter.

Funktionens typreturnmåste vara densamma som datatypen för det returvärde som funktionen returnerar. Returvärdetkan vara ett konstant värde eller en variabel. Det måste föregås av nyckelordet "return.".

Följande regler styr returtypen:

  • Det finns nästan inga begränsningar för returtypen, förutom array. (Array är ett annat mer avancerat ämne om hur man skapar sina data. Det ligger utanför ramen för den här artikeln och tas inte upp här.
  • Att ange att returtypen "void" innebär att inget returvärde är nödvändigt. Klausulen "retur" är implicit. Det betyder att du uttryckligen måste ange "return" i slutet av en "void"-funktion.

Skapa en funktion före eller efter main()?

Kompilatorn läser din fil uppifrån och ner. Således spelar ordningen roll.

Låt oss ta den enkla funktionen största gemensamma nämnare (GCD) som ett exempel. Du får ett felmeddelande:användning av odeklarerad identifierare 'getGCD'

 Skärmdump av VEXcode V5-programmeringsgränssnittet som visar olika kodblock och alternativ för programmering av VEX Robotics-system, vilket illustrerar de funktioner som är tillgängliga för användare i programmeringsavsnittet.

Detta gäller faktiskt oavsett om det kommer från main() eller ett annat anropande funktionsblock, dvs. "anropat funktionsblock" måste föregå "anropande funktionsblock".

Två möjliga lösningar:

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


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

Flytta den "anropade funktionen" ovanför det "anropande funktionsblocket", i exemplet "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;
  medan (rest > 0) {
    rest = a % b;
    a = b;
    b = rest;
  }
  returnera a;
}
	

Placera prototypen (även kallad signatur) för funktionen före det "anropande funktionsblocket".


Vad händer om du vill modularisera funktioner i olika filer?

Steg 1: Skapa en headerfil och lägg in prototypen för funktionen i den här filen.

t.ex. skapa en fil med namnet "myFuncs.h"

Du måste "lägga till" den här headerfilen i ditt projekt innan du kompilerar din kod. Detta gör att VEXcode Pro V5 IDE kan "vara medveten om" att den här nya headerfilen ingår innan den börjar bygga ditt projekt.

Så här gör du:

Skärmdump av ett programmeringsgränssnitt som visar funktioner i V5-kategorin, inklusive kodavsnitt och verktyg för utvecklare, som illustrerar de funktioner som finns tillgängliga i programmeringsavsnittet.

Skärmdump av programmeringsrelaterat innehåll i V5-kategoribeskrivningen, som visar viktiga funktioner och funktioner för utvecklare.

Skärmdump av beskrivningen av kategorin V5-programmering, som visar viktiga funktioner relaterade till programmering i V5-plattformen.

I den här headerfilen "common.h" (du kan namnge vad du vill, så länge det är alfanumeriskt utan mellanslag.)

Steg 2: Skapa en separat cpp-fil, t.ex. med namnet common.cpp

Skärmdump av ett programmeringsgränssnitt som visar olika kodningsalternativ och funktioner, vilket illustrerar funktionaliteten och layouten för V5-kategoribeskrivningen i programmeringsavsnittet.

//detta är common.cpp-filen

int getGCD(int a, int b) {
  int remainder = 1;
  while (remainder > 0) {
    remainder = a % b;
    a = b;
    b = remainder;
  }
  returnera a;
}

Flytta funktionen getGCD(...) till den här filen

#include "vex.h"
#include "common.h"
använder namnrymden vex;

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

Nu kommer allt du har i cpp-huvudfilen att bestå av följande

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

Framtida ämnen kommer att behandlas i mer avancerade avsnitt av VEX-biblioteket i framtiden:

  • Pass-by-värde kontra pass-by-referens
  • Skicka in en array
  • Passera i en struktur

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

Last Updated: